我们有一个 64 位 JBoss 实例,它部署了一个轴 Web 服务,它只是运行本机可执行命令的前端。当调用 Web 服务时,它会执行这个本机可执行命令。64 位实例使用 3gb 内存运行。
我们最近介绍了在同一台物理机上运行的第二个 JBoss 实例。它以 32 位模式运行,因为它必须运行一些 JNI 32 位代码。JBoss 的第二个实例绑定到 ports-01,因此它在 8180 上运行(基本上是默认 JBoss 端口的 +100)。此实例使用 512MB 内存运行。
自从引入第二个 JBoss 实例后,当 64 位实例在调用时尝试执行本机可执行命令时,我们会收到“空间不足”错误消息。这是来自 java 的 IOException,来自 unix forkAndExec 命令。我读到的所有内容都说这与交换文件大小有关。使用 unix, top 命令,看起来交换文件的大小永远不会改变,它是 3gb。当我们首先运行 64 位实例时,这似乎没有问题,但如果先启动 32 位实例,则会出现此错误。我想知道这两个实例是否在争夺资源,或者我们是否真的用完了来自 unix 的交换空间。我不确定 JBoss 是否使用交换空间以及它使用了多少,或者 Java 是否处理它?
我想我正在寻找有关此问题的解决方案的任何想法或建议。我似乎看到的主要模式是,如果 64 位实例首先启动,则本机可执行文件可以正常工作,但如果 32 位实例首先启动,则会出现问题。