У меня есть приложение Java, работающее на Solaris. Это приложение регулярно запускает внешние процессы с использованием Runtime.exec. Похоже, что через некоторое время, успешно запустив такие процессы, начнется запуск процесса. Сброс потока, сделанный в этот момент (и несколько минут спустя), показывает, что java.lang.UNIXProcess.forkAndExec "застрял". Ниже приведена верхняя часть соответствующей трассировки стека, взятой из дампа потока:
"Thread-85305" prio=3 tid=0x0000000102aae800 nid=0x21499 runnable [0x7fffffff2a3fe000]
java.lang.Thread.State: RUNNABLE
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
Я прочитал некоторые форумы, где другие испытали forAndExec, бросая IOException из-за нехватки места или недостаточно памяти, но я не получаю эту ошибку здесь. Я сейчас жду, чтобы получить результаты pstack в надежде, что он откроет больше информации.
Кто-нибудь знает, как решить эту проблему? благодаря, Mike
Установка патч-панели Sun Alert Patch сделает трюк.
Является ли stdout и stderr из процесса потребления? Вы можете посмотреть результаты полного буфера.
Вы можете проверить это, добавив перенаправление вывода в файл temp для команды, которая была создана.
Пока поток работает до тех пор, пока выполняется ваш исполняемый файл, возможно, это только ваш внешний исполняемый файл, который висит.
Вам следует попытаться найти параметры, переданные вашему исполняемому файлу, и попытаться запустить его вручную.