2010-09-21 132 views
0

我有一個多線程應用程序,它啓動一個外部應用程序執行的數據轉換爲在本申請的後面的部分的準備。調用Runtime.getRuntime()。EXEC()不啓動過程

我有一個問題,當我設置我的線程數高於6併發線程時,Runtime.getRuntime()。exec()無法啓動外部應用程序(我也嘗試使用ProcessBuilder以相同的結果)。它不會拋出任何異常,並且不會在標準輸出流或標準錯誤流中捕獲任何內容。更奇怪的是,重新啓動服務器後,我可以在幾分鐘內運行至少8個併發線程,而不會出現問題,但問題會再次出現。

我已閱讀,linux的實現使用fork()的命令,這可能會導致一個無法分配內存錯誤,但我沒有得到任何這樣的錯誤。

我已經寫了另外一個測試應用只需啓動notespad.exe的X次沒有問題,其中X爲爲100

該應用程序在VMware環境中的窗口2003標準的x64服務器上運行一樣大。 JVM版本是1.6.0_11。

我可以在試圖解決問題更新JVM,但想離開,作爲一個最後的努力,以防止需要測試新版本的JVM所有的應用程序。

+2

如果它不拋出任何類型的異常,並沒有降低sdtout或stderr,那麼它會做什麼? Process.waitFor()會立即返回嗎? 'Process.exitValue()'的結果是什麼?也許你需要將其歸結爲一個可重現的代碼示例。 – 2010-09-21 15:03:07

+0

WAITFOR()與128的值的搜索告訴我,退出代碼128意味着立即返回「沒有子進程來等待。 ERROR_WAIT_NO_CHILDREN」,這將使意義看到如何外部進程沒有被啓動。 – 2010-09-21 17:21:32

+0

如果fork命令將輸出寫入屏幕,請嘗試將輸出流寫入System.out或其他東西上輸出,看看會發生什麼。 – walters 2010-09-21 21:56:48

回答

相關問題