Solaris - Почему зависает java.lang.UNIXProcess.forkAndExec (собственный метод) - PullRequest
2 голосов
/ 17 октября 2010

У меня есть приложение 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 в надежде, что он покажет больше информации.

Кто-нибудь знает, как решить эту проблему?спасибо, Майк

Ответы [ 3 ]

0 голосов
/ 17 октября 2010

Являются ли stdout и stderr потребляемым процессом?Возможно, вы смотрите на результаты полного буфера.

Вы можете проверить это, добавив перенаправление вывода в временный файл для порожденной команды.

0 голосов
/ 13 декабря 2011

Установка Sun Alert Patch Cluster поможет вам.

0 голосов
/ 17 октября 2010

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

Вы должны попытаться найти параметры, переданные вашему исполняемому файлу, и попытаться запустить его вручную.

...