6
  • JVM を使用してサーバー アプリケーションを実行していますsunjava-1.6.0_21
  • 私のアプリケーションはデータ量が多く、キャッシュ サーバーとして機能します。そのため、アプリケーションの実行中に GC を取得することは想定されていない、多くの存続期間の長いデータが格納されます。
  • 次の JVM パラメータ-Xmx16384Mと を設定しています-Xms16384M
  • 必要なデータがロードされた後、アプリケーションのメモリ使用量は次のとおりです。
  • 合計ヒープ スペースは次のとおりです。13969522688
  • 最大ヒープ スペースは次のとおりです。15271002112
  • 空きヒープ領域は次のとおりです。3031718040
  • 長期 (古い世代) のヒープ ストレージ: Used=10426MB Max=10922MB Used/Max=95%

古い世代の使用 - これは実際のデータによるものであり、無料になる予定はないことを確認しました。私の質問は、デフォルトでヒープスペースのJVMサイジング(10922MBの古い世代を割り当てている)で、古い世代のセクションに空きスペースがほとんど残っていないことです。

  • 古い世代の空き容量が少ないと、アプリケーションに影響を与える可能性はありますか?
  • はいの場合、これをどのように処理すればよいですか? JVM チューニング パラメータnewratioを試したり、古い世代で使用できるスペースを増やしたり、アプリケーションをチューニングする必要があるその他の方法を試したりする必要があります。
4

2 に答える 2

3

古い世代の空き容量が少ないと、アプリケーションに影響を与える可能性はありますか?

Tenured Gen がいっぱいになると、大規模なコレクションが発生し、このタイプのコレクションにはコストがかかります。オプション : -verbose:gcand-XX:+PrintGCDetailsを使用して、フル GC が頻繁に発生したかどうかを確認できます。そうであれば、アプリケーションのパフォーマンスに影響を与える可能性があります。

はいの場合、これをどのように処理すればよいですか? newratio などの JVM チューニング パラメータを試して、古い世代に使用できるスペースを増やしたり、アプリケーションをチューニングする必要があるその他の方法を試したりする必要があります。

NewRatio を試してみることもできますが、エデンが短すぎると、在職世代がより早く満たされる可能性があることに注意してください。

結論として、監視ツールを使用して、使用する必要がある VM オプションをよりよく理解する必要があります。アプリの実行中に世代がどのように満たされるかを簡単に示します。gc ログよりも読みやすく、理解しやすいです;)

于 2012-06-08T08:42:05.580 に答える
2

オブジェクトの寿命が長いことがわかっている場合は、領域のサイズを相互に設定するパラメーターを操作します。

young generationand old generation(eden および ternured スペース) と両方のサバイバーに比率を設定できます。

目標は、マイナー ガベージ コレクションがすべてのメモリを解放できるようにすることで、フル ガベージ コレクションを最小限に抑えることです。

アプリケーションでオブジェクトにアクセスできるようにすることで、ガベージ コレクションがオブジェクトを解放するのを防ぎます。つまり、マイナー ガベージ コレクションによって削除されるオブジェクトだけを気にする必要があります。

パラメータを有効にする

-verbose:gc -Xloggc:/opt/tomcat/logs/gc.out -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

次に、ツールGCViewerを使用すると、費やされた時間gcと削除されたオブジェクトの数 (サイズ) を確認できます。いくつかの有用な指標の中で。

于 2012-06-08T07:44:20.800 に答える