Solaris – 为什么java.lang.UNIXProcess.forkAndExec(Native Method)挂起

我有一个在Solaris上运行的java应用程序。 此应用程序使用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.(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) 

我已经阅读了其他人经历过的一些论坛,因为没有足够的空间或没有足够的内存而导致因为ExExcc抛出IOException,但我在这里没有收到此错误。 我现在正在等待获得pstack的结果,希望它能揭示更多的信息。

有没有人知道如何解决这个问题? 谢谢,迈克

只要您的可执行文件正在运行,该线程就会生效,也许只有您的外部可执行文件才会挂起。

您应该尝试查找传递给可执行文件的参数并尝试手动启动它。

是否正在消耗stdout和stderr? 您可能正在查看完整缓冲区的结果。

您可以通过将输出重定向添加到生成的命令的临时文件来测试此操作。

安装Sun Alert Patch Cluster可以解决问题。