0

「十分なスペースがありません」と主張する IOExceptions をスローしているリモート Solaris マシン上の Tomcat にデプロイされた Java Web アプリケーション (WAR) があります。数日かけてこの問題を痛烈に調査した結果、Solaris が親プロセスと子プロセスの両方をシステムのスワップ領域に配置する必要があるコードでプロセスの分岐が発生していることがわかりました。両方のプロセスが含まれています。これは、私ができるよりも雄弁に/知的に何が起こっているかを説明する記事です。しかし、それは間違いなく犯人です。

そのため、システム管理者にチケットを提出してスワップ領域を増やす必要がありますが、必要な領域を把握するのに苦労しています。JConsole を使用してサーバーのメモリ使用量をプロファイリングできますが、VM Summaryタブで、使用済み/使用可能なスワップ領域の情報は、JConsole の起動時にのみ読み取られ、更新されないようです。これにより、この分岐/メモリの問題を再現している間、JConsole を使用してリアルタイムのスワップの使用状況を確認することができなくなります。

私がアクセスできる唯一のサーバーモニターは、と呼ばれるものprstatです(私は と に慣れてtopnmonます)。

システムに特定の番号を与える必要があります (つまり、myserver.net のスワップ領域を 250M 増やしてください)。この番号を取得するにはどうすればよいですか? サーバーは Java 1.6u25 で実行されているため、私が認識していない Java ツールや、使用できる可能性のある Solaris プロファイラー/モニターが存在する可能性があります。

4

2 に答える 2

1

多くの場合、スワップスペースを少なくともメインメモリサイズと同じ大きさにします。したがって、16GBのマシンには16GBのスワップがある可能性があります。(以前は、スワップがメインメモリサイズの何倍もあった場合でした)

Javaの場合、「オフヒープ」メモリを除いて、すべてが物理メモリにある必要があります。これは、たとえばGCを実行すると、すべてのメモリが検査され、その一部がスワップされている場合でも、アプリケーションが一度に数秒または数分間ハングするためです。

アプリケーションがより多くのスワップスペースを必要としているように見える場合、本当に必要なのはより多くのメインメモリである可能性が高いです。

于 2012-06-14T15:17:18.420 に答える
0

現在のRAMとスワップサイズ、実行中のJVMの数、ヒープサイズと仮想メモリの使用量、これらのフォークプロセスの予想される同時実行レベルなど、より多くの情報を提供すると役立ちます。prstat -Z出力も役立ちます。

いずれの場合も、swap -sコマンドを使用して仮想メモリの使用状況を監視し、最後の値(... kが使用可能)が常に十分に大きいことを確認できます。

一般的な信念にもかかわらず、スワップが大きすぎても問題はまったくないことに注意してください。最初のアプローチとして、現在のスワップ領域のサイズを2倍にすることをお勧めします。

swap -lコマンドを使用して、現在のスワップ領域のサイズを取得しました。

これは、Solarisアプリケーションのメモリ管理に関する記事でも役立つ可能性があります

于 2012-06-15T00:30:01.297 に答える