2016-06-27 11 views
1

Javaアプリケーションでパフォーマンスの問題が発生したため、プロファイリングにJavaMelodyを使用しましたが、珍しいことは「Used Memory」グラフです。それは〜8GBのラインに達するように見える短いスパイクをたくさん持っていて、私が理解するように、GCはメモリをきれいにしています。誰かがこれらのスパイクが何を意味するかを追跡する経験がありますか?彼らはいくつかの特定の問題を指摘しているようです。Java:「used memory」グラフの頻繁な急上昇

GCとJVMのように構成されている: -XX:PermSizeを= 384メートル -XX:MaxPermSizeを= 512メートル -XX:+ UseCompressedOops -XX:+ UseFastAccessorMethods -XX:+ CMSClassUnloadingEnabled -XX:+ UseParNewGC -XX:-UseParallelOldGC -XX:-UseAdaptiveSizePolicy -XX:SurvivorRatio = 128 -XX:NewSizeパラメータ= 4055メートル -XX:MaxNewSize = 4055メートル -XX:+ UseConcMarkSweepGCを -XX:CMSInitiatingOccupancyFraction = 60 -XX:+ [UseCMSInitiatingOccupancyOnly] -Xms12888 M -Xmx12888m -Dsun.rmi.dgc.client.gcInterval = 1800000 -Dsun.rmi.dgc.server.gcInterval = 1800000

グラフは、(グリーン、ブルーの "最大" である "平均")であります: Memory graph - 16:00 - 8:00 system without load, 8:00+ - system is under load

までシステムに負荷はありませんでした。

8時00後、それに負荷がかかっていますが、ない巨大な1(〜20のsimultanious操作)

答えて

0

あなたはJVMの通常の動作である、あなたのエデンスペース内でオブジェクトを割り当てているようにこれが見えます。フライトレコーダーのようなメモリプロファイラを使用して、割り振り速度を調べ、それを減らす方法があるかどうかを確認することをお勧めします。

特に、2秒に1回以上GCを実行すると、作成しているガベージの量を減らそうとします。これよりも長い場合は、それが重要かどうかというユースケースによって異なります。

メモリプロファイルを最近作成していない場合は、アプリケーションのさまざまなビューを表示するために、これを行うことをおすすめします。私はパフォーマンスが問題ではなかったとしても、バグを見つけ出すことが有用であることを発見しました。

-XX:SurvivorRatio = 128

は、これはかなり高いですし、非常に短命オブジェクトの多くを持って示唆しています。これらは、最適化するのが簡単かもしれません。

私は最近、ニューヨークのクライアントのルールエンジンに取り組んでいました。割り当てを減らすために1日を費やしてパフォーマンスを2.3倍向上させました。 CPUで2日目を過ごすことで、スループットは4倍になります。

+1

実際にはリークがあり、あまりにも多くのオブジェクトが作成されました。 SurvivorRatioも高すぎました。ありがとう! – Immortal

関連する問題