У меня есть многопоточное приложение, которое запускает внешнее приложение для преобразования данных при подготовке к более поздним частям приложения.
У меня проблема: когда я устанавливаю количество потоков выше 6 одновременных потоков, Runtime.getRuntime().exec() не может запустить внешнее приложение (я также пытался использовать ProcessBuilder с теми же результатами). Он не выдает никаких исключений, и ничего не фиксируется ни в стандартном потоке вывода, ни в стандартном потоке ошибок. Что еще более странно, так это то, что после перезагрузки сервера я могу запустить как минимум 8 одновременных потоков в течение нескольких минут без проблем, но затем проблема вернется.
Я читал, что в реализации Linux используется команда fork(), которая может вызвать ошибку невозможности выделения памяти, но я не получаю такой ошибки.
Я написал еще одно тестовое приложение, чтобы просто запускать X количество notepad.exe без проблем, когда X достигает 100.
Приложение работает на стандартном x64-сервере Windows 2003 в среде VMware. Версия JVM 1.6.0_11.
Я могу обновить JVM в попытке решить проблему, но хотел бы оставить это как последнее усилие, чтобы избежать необходимости тестировать все приложения с новой версией JVM.
Process.waitFor()
возвращается немедленно? Каков результатProcess.exitValue()
? Возможно, вам нужно свести это к воспроизводимому примеру кода. - person Mark Peters   schedule 21.09.2010