0

軸Webサービスをデプロイする64ビットのJBossインスタンスがあります。これは、ネイティブの実行可能コマンドを実行するためのフロントエンドフェースにすぎません。Webサービスが呼び出されると、このネイティブ実行可能コマンドが実行されます。64ビットインスタンスは3GBのメモリで実行されます。

最近、同じ物理マシンで実行されているJBossの2番目のインスタンスを導入しました。JNI 32ビットコードを実行する必要があるため、32ビットモードで実行されます。JBossのこの2番目のインスタンスはports-01にバインドされているため、8180(基本的にデフォルトのJBossポートの+100)で実行されます。このインスタンスは512MBのメモリで実行されます。

この2番目のJBossインスタンスを導入してから、64ビットインスタンスが呼び出されたときにネイティブ実行可能コマンドを実行しようとすると、「スペースが足りません」というエラーメッセージが表示されます。これは、JavaからのIOExceptionであり、unixforkAndExecコマンドからのものです。私が読んだすべてのことは、これはスワップファイルのサイズと関係があると言っています。unix、topコマンドを使用すると、スワップファイルのサイズは変更されないように見えます。これは3GBです。最初に64ビットインスタンスを実行すると、これに問題はないようですが、32ビットインスタンスを最初に実行すると、このエラーが発生します。2つのインスタンスがリソースをめぐって競合しているのか、それともUNIXからのスワップスペースが本当に不足しているのか疑問に思います。JBossがスワップスペースを使用するかどうか、およびそれがどれだけ使用するか、またはJavaがそれを処理するかどうかはわかりません。

私はこの問題についての解決策のためのアイデアや提案を探していると思います。私が見ている主なパターンは、64ビットインスタンスが最初に起動した場合、ネイティブ実行可能ファイルは正常に機能しますが、32ビットインスタンスが最初に起動した場合、問題が発生することです。

4

2 に答える 2

0

OSはスワップスペースを処理しますが、Javaはこれらのことを認識していません。いずれにせよ、スワップスペースでJavaの任意の部分を実行することは非常に悪い考えです。

これらの2つのプログラムが実行された後、十分なメインメモリがあることを確認します(ヒープだけでなく、これらのプロセスで使用される合計メモリ)

于 2012-12-29T16:48:28.070 に答える
0

結局、それはスワップスペースの問題であることが判明しました。8GBのメモリと4GBのスワップがありました。1台のサーバーは800MBのスワップを使用し、もう1台のサーバーは3.8GBのスワップを使用していたため、制限を超えることはほとんどありませんでした。

UNIXで「top」コマンドを使用する代わりに、swap -sを使用して、使用可能なスワップスペースのサイズを表示する必要がありました。これはより正確でした。

mkfile 10240M / opt/myswapfileのようなコマンドで一時スワップファイルを作成しました。次に、コマンドswap -a / opt / myswapfileを使用して、サーバーのスワップ領域に追加しました。

今、彼らは一緒にうまく働いているようです。

于 2013-01-05T18:26:21.833 に答える