從 IIS6 執行的 Java 子程序返回退出值 128 並且沒有 stdout/stderr
我正在測試環境中設置新伺服器,幾乎一切正常,但 Java 似乎無法創建新程序。架構的簡短版本:Windows 2003、IIS6、ColdFusion 8.0.1 MultiServer with JRun,一切都是 64 位*。
ColdFusion 請求呼叫一些將 R(統計包)作為本機程序執行的 Java 程式碼,擷取生成的 stdout/stderr,並對其進行一些額外的工作。Java 程式碼似乎沒有啟動 R,儘管沒有拋出異常。它貫穿所有內容(通過擷取 stdout/stderr/exitcode),但似乎沒有呼叫 R 執行檔,stdout/stderr 中沒有任何內容,並且 Process.exitValue() 返回 128。
我將 R 排除在等式之外,只是試圖讓程式碼返回“cmd.exe /c dir”的輸出,但沒有任何改變——exitValue() 仍然返回 128。(*我使用的是 R 2.10.1,這只是 32 位,但由於我什至無法執行 cmd.exe 我相信這不相關。)
我也相信我已經排除了訪問/權限問題。ColdFusion 使用的 AppPool 設置為作為 NetworkService 執行,但我什至嘗試將身份設置為域管理員,但沒有幫助。
我幾乎把它發佈到了 StackOverflow(如果我最終被重定向到那裡也不會被冒犯),但是這個完全相同的程式碼可以在其他非常相似的環境中工作,這是我們系統中唯一不能在新伺服器。
這適用的其他環境:
- Win2003, IIS6, CF801 MultiServer, JRun, all 32-bit, testing
- Win2008, IIS7, CF801 MultiServer, JRun, all 64-bit, testing
- Win2003, IIS6, CF801 MultiServer, JRun, 全64位, 生產
所以我想我的問題如下:
- 有沒有其他人在呼叫本機程序的 Java 伺服器端應用程序中看到(或更好地修復)這種行為?
- 除了額外的日誌記錄(我已經嘗試過),您還可以嘗試哪些其他故障排除或診斷步驟?
所以我們通過殺死大量的 JRun 程序來“解決”這個問題。我們認為該問題與此處描述的問題密切相關:http ://www.arcanadev.com/support/kb/K00000329.aspx ,嘗試呼叫 java 的 exec 的程序超出了可用的桌面堆空間或記憶體。很奇怪。
正常工作的其他伺服器只是同時執行的 JRun 實例較少。所以我們認為此時我們的選擇是 (1) 執行更少的 JRun 實例,(2) 遵循連結文章的建議來增加可用的桌面堆空間,或者 (3) 升級到 Windows 2008+。