1

私はパフォーマンステスト中です。-Xmx と -Xmx の値の設定に関する多くのブログを見てきました。-Xms=-Xmx が良いと言う人もいるので、少し混乱しています。私は、実稼働サーバーで約 8 ~ 15,000 人がオンラインになっているプロジェクトに参加しています。つまり、常に高負荷になっています。-Xms と -Xmx の最適化設定は何ですか?

4

1 に答える 1

1

悲しいことに、これは Java の大きなトピックであり、コードの特定のリリースに対してここでチューニングを行うほど、次のリリースを行うときに再チューニングしなければならないリスクが高くなります。いくつかのコンサルタント会社は、その複雑さのためにこの種のものを専門に扱っています。さらに、これを管理することを目的とした商用 JVM である Zing のリリースが現在見られます (GC 管理の問題に予備の CPU を投入することによって)。ただし、ほとんどの場合に役立つ設定がいくつかあります。

あなたの目標は、JVM 内で「世界を止める」イベントを回避することです。これは、JVM が作業を開始している間、すべてのスレッドを一時停止します。Xms と Xmx を同じ値に設定すると、JVM が小さなヒープから開始し、必要に応じてサイズを変更するように指示されるため、ここで役立ちます。残念ながら、このサイズ変更は、ヒープおよびフル GC 内のオブジェクトの大きなコピーを引き起こす世界的なイベントを停止します。高い。

次の目標は、オブジェクトが時期尚早に保有されないようにすることです。JVM は、多数のオブジェクトを作成し、その後すぐに解放するのに非常に効率的です。問題は、オブジェクトが「大きすぎる」場合、オブジェクトがしばらく保持されている場合、またはオブジェクトが eden スペース (新しいオブジェクト用に予約されているヒープの領域) に収まらない場合に発生します。

一般的に、私は若い世代に与えられるヒープの量を増やし、ヒープ全体のサイズを可能な限り小さくしたいと考えています。Java ではヒープが小さいほど高速ですが、メモリ不足のリスクがあります。そのため、ほとんどの時間をアルゴリズムの最適化とコードのクリーニングに費やしています。それでも必要なパフォーマンスが得られない場合は、JVM にその GC アクティビティをログ ファイルに書き込むように指示します (詳細は、Sun ホットスポット、JVM 6 の GC ログの分析を参照)。私の目標は、どれだけのデータが保有されているかを監視することです。

最後に、さまざまな GC アルゴリズムを調べて、最高のパフォーマンスを提供する JVM でサポートされているアルゴリズムを選択する必要があります。一般に、私は G1 コレクターには近づきません。それはあまりうまく機能せず、QCon で「失敗した実験」であると議論され、GC の実装者は他のアプローチに移行しています。

于 2013-03-11T12:51:08.663 に答える