Runtime.getRuntime().exec() не запускает процесс

У меня есть многопоточное приложение, которое запускает внешнее приложение для преобразования данных при подготовке к более поздним частям приложения.

У меня проблема: когда я устанавливаю количество потоков выше 6 одновременных потоков, Runtime.getRuntime().exec() не может запустить внешнее приложение (я также пытался использовать ProcessBuilder с теми же результатами). Он не выдает никаких исключений, и ничего не фиксируется ни в стандартном потоке вывода, ни в стандартном потоке ошибок. Что еще более странно, так это то, что после перезагрузки сервера я могу запустить как минимум 8 одновременных потоков в течение нескольких минут без проблем, но затем проблема вернется.

Я читал, что в реализации Linux используется команда fork(), которая может вызвать ошибку невозможности выделения памяти, но я не получаю такой ошибки.

Я написал еще одно тестовое приложение, чтобы просто запускать X количество notepad.exe без проблем, когда X достигает 100.

Приложение работает на стандартном x64-сервере Windows 2003 в среде VMware. Версия JVM 1.6.0_11.

Я могу обновить JVM в попытке решить проблему, но хотел бы оставить это как последнее усилие, чтобы избежать необходимости тестировать все приложения с новой версией JVM.


person Josh Halbur    schedule 21.09.2010    source источник
comment
Если он не выдает никаких исключений и ничего не приходит в sdtout или stderr, то что он делает? Process.waitFor() возвращается немедленно? Каков результат Process.exitValue()? Возможно, вам нужно свести это к воспроизводимому примеру кода.   -  person Mark Peters    schedule 21.09.2010
comment
waitFor() немедленно возвращает значение 128. Поиск говорит мне, что код выхода 128 означает, что нет дочерних процессов для ожидания. ERROR_WAIT_NO_CHILDREN, что имеет смысл, поскольку внешний процесс не запускается.   -  person Josh Halbur    schedule 21.09.2010
comment
Если команда fork записывает выходные данные на экран, попробуйте записать выходной поток для вывода на ваш System.out или что-то еще и посмотреть, что произойдет.   -  person walters    schedule 22.09.2010
comment
И stdout, и errout являются пустыми потоками.   -  person Josh Halbur    schedule 22.09.2010
comment
Я до сих пор не знаю, в чем была причина проблемы, но перемещение моего процесса на новый экземпляр виртуальной машины, похоже, решило проблему.   -  person Josh Halbur    schedule 28.09.2010


Ответы (1)


Попробуйте загрузить dll "framedyn.dll" с http://www.dlldump.com/download-dll-files_new.php/dllfiles/F/framedyn.dll/5.1.2600.2180/download.html и вставьте в C:\Windows \Система32.

person Helder    schedule 21.11.2014