1

先週、いくつかの興味深い問題に出くわしました。TomcatでApache HTTP Serverを実行している運用サーバーの 1 つが停止し、HTTP の停止を報告していることに気付きました。

この問題をさらに調査したところ、JVM が原因でメモリ ページがすぐにスワップ アウトされたことが原因であると思われました。これにより、スワップ領域が完全に読み込まれ、次にページがスワップに移動されたときにメモリの問題が発生しました。

さらに調査すると、一部の Linux ディストリビューションではデフォルトで 60% に設定されている JVM swappiness 係数があるようです。いくつかの調査に基づくと、トラフィックの多い Web サービスでは、これは高い値になる可能性があるようです。スワップ領域は 2 GB に設定されました。

スワップの詳細は次のとおりです。

 Filename                                Type            Size    Used    Priority
 /dev/sda3                               partition       2096472 1261420 -1

 From /proc/meminfo
 SwapCached:     944668 kB

JVM プロパティは次のとおりです。

-Xmx6g -Xms4g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:PermSize=512M -XX:MaxPermSize=1024M -XX:NewSize=2g -XX:MaxNewSize=2g -XX:ParallelGCThreads=8

サーバーは 12 GB RAM で実行されます。

Swappiness は、JVM のGCプロセスとはうまくいきません。したがって、swappiness を 0 に減らしてみましたが、何も変わりませんでした。スワップ領域全体が消費され、OutOfMemory エラーが発生するケースがまだ見られます。

JVM のパフォーマンスを調整するにはどうすればよいですか?

4

2 に答える 2

1

swappiness係数は、実際には Linux のシステム全体の設定であり、JVM 固有ではありません。

いくつかの種類のアプリケーションに関する私の個人的な経験では、問題なく動作するためにスワップをオフにする必要があります。あなたのアプリケーションがこのカテゴリに属しているかどうかはわかりませんが、空き RAM が十分にあるにも関わらずアプリがスワップアウトされているのを見てきました。ご指摘のとおり、GC とスワップはうまく混ざりません。スワップ度は OS への指標にすぎないため、状況に応じて、スワップアウトされる量への影響が大きくなったり小さくなったりする可能性があります。私の提案は、スワップを完全にオフにしてみることです。

これを行うには、root になるか、sudoアクセスできる必要があります。swap in を記述している行をコメント アウトします/etc/fstab。これにより、再起動後に swap がオンになるのを防ぐことができます。次に、現在のサーバー実行のスワップをオフにするために、実行しますswapoff -a。RAM に戻す必要があるデータがスワップにある場合、これには数分かかることがあります。次に、出力の最後の行をチェックして、free使用可能なスワップの合計サイズが 0 であることを確認します。その後、アプリを観察して、スワップをオフにすることで問題が解決したかどうかを判断します。

于 2012-06-04T13:12:17.830 に答える
0

物理 RAM が 12 GB で、ヒープが 6 GB (最大) に設定されている場合、十分な RAM があります。このサーバーは Tomcat インスタンス専用ですか?

詳細な GC ログ ファイルを見て、時間の経過に伴うメモリ使用量を確認してください。アクセス ログ ファイルをチェックして、時間の経過とともにアクセス リクエストが増加しているかどうかを確認します。

于 2012-06-02T17:37:28.723 に答える