2009-04-14 14 views
8

メモリが増え、-Xmx経由で使用すると、Sun JVMの速度が低下しますか? (仮定:マシンには十分な物理メモリがあり、仮想メモリの交換に問題はありません)-Xmxでより多くのメモリを割り当てると、Sun JVMの速度が低下しますか?

私のプロダクションサーバーはメモリアップグレードを受けるため、質問します。 -Xmx値を何かデカントにバンプしたいと思います。考え方は、時々発生する私自身のプログラミングエラーのためにヒープスペースの枯渇の失敗を防ぐことです。まれな出来事ですが、2048メガバイト以上のような卑猥な-Xmx値を持っていれば、急速に進化するwebappで回避することができます。アプリケーションは大量に監視されているため、JVMのメモリ消費量の異常な増加が気づき、欠陥が修正されました。

可能な重要な詳細:

  • Java 6の(64ビットモードでrunnign)
  • 4コアXeonプロセッサ
  • RHEL4 64ビット
  • スプリングは、
  • 高いディスクをHibernateとネットワークIO

EDIT:私は自分のJVMの設定を投稿するのを避けようとしましたが、明らかにその問題はばかげて終わりました。だから、ここでは、関連する設定パラメータで行く:これは仮想メモリの使用状況/スワッピングにつながらないよう

-Xms256m 
-Xmx1024m 
-XX:+UseConcMarkSweepGC 
-XX:+AlwaysActAsServerClassMachine 
-XX:MaxGCPauseMillis=1000 
-XX:MaxGCMinorPauseMillis=1000 
-XX:+PrintGCTimeStamps 
-XX:+HeapDumpOnOutOfMemoryError 

答えて

6

メモリを追加すると、ヒープがいっぱいになるのに時間がかかります。その結果、ガベージコレクションの頻度が減ります。しかし、あなたのオブジェクトがどのように死に至るかによっては、1つのGCを増やすのにどれくらいの時間がかかるかを知ることができます。

GCの所要時間の主な要因は、ライブのオブジェクトがいくつあるかです。したがって、事実上すべてのオブジェクトが若々しく死ぬと、確立されると若いヒープからエスケープされないオブジェクトがあれば、GCを実行するのにどれくらいの時間がかかります。ただし、テンポラリヒープを循環させる必要があるときは、これらのオブジェクトのほとんどがまだ周囲にあるので、不合理な時間にすべてが停止することがあります。それに応じてサイズを調整します。

+0

ありがとうございます。編集した質問からわかるように、最大​​期間をGC期間に設定しました。テンポラリーヒープなどを調整する能力に気づいていますが、私はまだ時期尚早最適化を推し進めていません。しかし、おそらくそれは理にかなって...私は別のSOの質問が来るのを感じることができます! –

0

より多くのメモリは、通常、少なくとも限り、あなたのごみ収集環境でのパフォーマンスが向上します。

GCは参照のみを追跡し、メモリ自体は追跡しません。結局、VMは同じ数の(ほとんど寿命の短い一時的な)オブジェクトを割り当てますが、ガベージコレクタの呼び出し頻度は少なくなります。そのため、ガーベッジコレクタの総作業量はそれ以上ではありません。弱い参照を使用するキャッシュメカニズムにも役立ちます。

サーバーとクライアントVMが64ビット(32ビット用)であるかどうかはわかりませんので、そのことも調べてください。

+0

感謝:)を必要としない限り、

はもちろん、あなたが300Gbyteのようないくつかの非常識な値に-Xmxを設定するべきではありませんが、私は私の他の構成が良いです確信しています。そして、たとえそれに欠陥があっても、私はこの問題を「すべてのものが平等」の領域にとどめたいと思っています。 –

+0

一言...はっきりと私はもっと詳しく述べなければなりません。 :) –

4

問題でメモリを追加するだけで、アプリケーションのスループットは向上しますが、CMSガベージコレクタを使用しているマルチコアシステムでは応答性が低下する可能性があります。これはGCが少なくなるためですが、より多くの作業が必要になるためです。利点は、GCで解放されるメモリが増えるため、割り当ては非常に安いので、より高いスループットが得られることです。

ところで、あなたは-Xmxと-Xmsを混乱させるようです。 -Xmsは最初のヒープサイズを設定し、-Xmxは最大ヒープサイズを設定します。

+0

いいえ、私は2つのパラメータを混同していません:)私はちょうど質問を投稿したときに関連性のあるものだと思っていました。入力いただきありがとうございます! –

+0

@Stu Thompson:しかし、あなたは2つを同じ意味で使用しているようです。したがって、どちらが意味するのかは分かりません。 –

+1

クラップス。あなたが正しいです。私はタイプミスがあり、「Xmx」を意味するときに「Xms」を入れました。謝罪いたします。 –

0

私の経験によれば、それは減速しませんが、JVMは常にXmsに戻って下限に近づくか、近くにしようとします。あなたがそれを試すことができれば、Xmsもバンプしてください。 Sunは両方とも同じサイズで推薦しています。旧世代の古いデータが高価に蓄積されるのを避けるために、-XX:NewSize = 512m(単なる構成番号)を追加します。ほとんどのデータが短命であるため、700 MBのNewSizeでWebアプリケーションを実行しています。

結論:私は遅くなるとは思っていませんが、もっと多くの記憶を働かせてください。新しいサイズの領域を大きく設定し、XmsをXmxに設定すると、Xmsの制限にカットバックする必要がないため、GCの負荷を軽減できます。

0

通常、パフォーマンス/スループットには影響しませんあなたは-Xmxを増やします。 理論的には、より長く「世界を止める」フェーズがあるかもしれませんが、CMSでは実際には問題はありません。あなたは本当にそれが入力のために

関連する問題