从 IIS6 运行的 Java 子进程返回退出值 128 并且没有 stdout/stderr

从 IIS6 运行的 Java 子进程返回退出值 128 并且没有 stdout/stderr

我正在测试环境中设置新服务器,几乎所有功能都正常,但 Java 似乎无法创建新进程。架构简述:Windows 2003、IIS6、带有 JRun 的 ColdFusion 8.0.1 MultiServer,所有系统均为 64 位*。

ColdFusion 请求调用一些 Java 代码,这些代码将 R(统计包)作为本机进程运行,捕获生成的 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、全部 32 位、测试中
  • Win2008、IIS7、CF801 MultiServer、JRun、全部 64 位、测试中
  • Win2003、IIS6、CF801 MultiServer、JRun、全部 64 位、生产

所以我想我的问题如下:

  • 有没有其他人在调用本机进程的 Java 服务器端应用程序中看到过(或者更好地说是修复了)这种行为?
  • 除了额外的日志记录(我已经尝试过)之外,您还可以尝试哪些其他故障排除或诊断步骤?

答案1

因此我们通过终止大量 JRun 进程来“解决”了这个问题。我们认为该问题与此处描述的问题密切相关:http://www.arcanadev.com/support/kb/K00000329.aspx,尝试调用 java 的 exec 的进程超出了可用的桌面堆空间或内存。非常奇怪。

其它正常运行的服务器只是同时执行的 JRun 实例较少。因此,我们认为此时我们的选择是 (1) 运行较少的 JRun 实例,(2) 按照链接文章的建议增加可用的桌面堆空间,或 (3) 升级到 Windows 2008+。

相关内容