2017-08-04 10 views
3

現在、Javaのネイティブメモリリークに問題があります。サーバーはかなり大きいです(40cpus、128GBのメモリ)。 Javaのヒープ・サイズは64Gです。大量のデータを約400スレッドの文字列に読み込み、数分後にメモリから捨てる、非常にメモリ集約的なアプリケーションを実行します。G1と大容量メモリでのJavaネイティブメモリリーク

したがって、ヒープは非常に速くいっぱいですが、ヒープ上のものは古くなり、非常に高速にGCすることができます。そこで、G1を使用して数分間STW休憩を持たないようにする必要があります。

これはうまくいくようです - ヒープはアプリケーションを数日間実行するのに十分な大きさですが、ここでは何も漏れません。とにかく、Javaプロセスは、すべての128Gが使用され、アプリケーションが割り振りに失敗してクラッシュするまで、時間とともに成長し、成長しています。

私は、最大でglibcの問題を含むネイティブのJavaメモリリークについてたくさん読んだことがあります。アリーナ(glibc 2.13で喘ぎがあるので、dist upgradeなしでMALLOC_ARENA_MAX = 1または4に設​​定すると修正できません)。

だから私たちは私たちを与えたものjemallocしようとしたためグラフ:INUSE空間

inuse-space

INUSE-オブジェクトinuse-objects

私はここで何が問題になるのではない、誰かがアイデアを持っていますか?

私たちのアプリを実行しているtomcatプロセスの環境パラメータとしてjemallocに "MELOC_CONF =" narenas:1 "を設定しても、それでも何とかglibcのmallocバージョンを使用できますか?

これは私たちのG1セットアップです、多分ここでいくつかの問題?

-XX:+UseCompressedOops 
-XX:+UseNUMA 
-XX:NewSize=6000m 
-XX:MaxNewSize=6000m 
-XX:NewRatio=3 
-XX:SurvivorRatio=1 
-XX:InitiatingHeapOccupancyPercent=55 
-XX:MaxGCPauseMillis=1000 
-XX:PermSize=64m 
-XX:MaxPermSize=128m 
-XX:+PrintCommandLineFlags 
-XX:+PrintFlagsFinal 
-XX:+PrintGC 
-XX:+PrintGCApplicationStoppedTime 
-XX:+PrintGCDateStamps 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+PrintTenuringDistribution 
-XX:-UseAdaptiveSizePolicy 
-XX:+UseG1GC 
-XX:MaxDirectMemorySize=2g 
-Xms65536m 
-Xmx65536m 

ありがとうございました!

+0

メモリ・オプティックでそれを見ることで、この問題を分析することは本当に難しいだろう。メモリ割り当て、GCスループット、CPU使用率をよりよく理解するために、Dynatraceなどのツールを使用してプロセスを監視するアドバイスがあります。 – Armaiti

+0

私は今日、重い負荷と頻繁なSystem.gc()の使用でのみ発生したG1ネイティブメモリリークを分離しました。私はOS XでXCodeを使って、ネイティブヒープのデータが何百万と何百万という32バイトのmallocであることを最初に確認しました。そして、dtraceを使って32バイトのmallocの大半がG1に由来すると判断しました。 –

答えて

0

System.gc()を明示的に呼び出すことはありませんでした。一方、G1の使用を中止し、xmsとxmx以外を指定しませんでした。

したがって、ヒープのほぼすべて128Gを使用してください。 Javaプロセスのメモリ使用量は高くなっていますが、数週間は一定です。私はこれがG1か少なくとも一般的なGCの問題であると確信しています。この「ソリューション」による唯一の欠点は、GCの休止時間が高いことですが、ヒープを増やすと最大90秒から約1〜5秒に減少しました。

これまでは、-40:ParallelGcThreadsオプションを使って、28(デフォルトは40cpus)から1に下がったときのメモリリーク速度に大きな影響を与えました。メモリグラフは、異なるインスタンス上の値...

enter image description here

関連する問題