2010-09-21 5 views
0

У меня есть многопоточное приложение, которое запускает внешнее приложение для преобразования данных при подготовке к последующим частям приложения.Runtime.getRuntime(). Exec() не запускает процесс

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

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

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

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

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

+2

Если это не вызывает каких-либо исключений, и ничто не сходит с sdtout или stderr, то что делает * делает это? Возвращает ли 'Process.waitFor()' немедленно? Каков результат 'Process.exitValue()'? Возможно, вам нужно сварить это на примере воспроизводимого кода. –

+0

waitFor() немедленно возвращается со значением 128. Поиск говорит мне, что код выхода 128 означает: «До сих пор нет дочерних процессов. ERROR_WAIT_NO_CHILDREN», что будет иметь смысл видеть, как внешний процесс не запускается. –

+0

Если команда fork записывает выходы на экран, попробуйте направить выходной поток для вывода на System.out или что-то еще и посмотреть, что произойдет. – walters

ответ