私は奇妙なメモリリークのトラブルシューティングを行います。これはJava 7に固有のもので、7u79では発生しません。Javaメモリリーク - jmapはクラスを表示しませんが、jstatは
私はJavaコードにアクセスできません。 私はリークがクラス(ないヒープ)と問題のクラスについて知っている、アクションはリークが発生し、正確にどのユーザーを知っているが、+ TraceClassLoading + TraceClassUnloadingを見つけるのは簡単です:
[Loaded com.mastercard.mcwallet.sdk.xml.allservices.ShoppingCartRequest$JaxbAccessorF_oAuthToken from __JVM_DefineClass__]
[Loaded com.mastercard.mcwallet.sdk.... thousand similar classes per one user action... ]
これらのクラスは、増加するように見えますjstat -class
によってクラスカウンタ出力:
Loaded Bytes Unloaded Bytes Time
14045 26138.8 0 0.0 110.00 << buggy user action
14675 26754.6 0 0.0 110.05
15300 27364.9 0 0.0 110.10
15304 27370.9 0 0.0 110.11
15304 27370.9 0 0.0 110.11
15304 27370.9 0 0.0 110.11
15306 27374.0 0 0.0 110.11
15306 27374.0 0 0.0 110.11
15306 27374.0 0 0.0 110.11
15306 27374.0 0 0.0 110.11 << buggy user action
15930 27982.2 0 0.0 110.18
16553 28589.3 0 0.0 110.23
16553 28589.3 0 0.0 110.23
事は、これらのクラスは、ガベージコレクションメタスペースから、決して[Unloaded]
されることはありません、彼らはjmap -clstats
には表示されませんということです。
class_loader classes bytes parent_loader alive? type
<bootstrap> 2574 4493256 null live <internal>
0x0000000087d016d0 1 1471 0x000000008237f088 dead sun/reflect/[email protected]
... some lines omitted ...
0x000000008237f088 6505 12228227 0x0000000080383938 dead org/apache/catalina/loader/[email protected]
... some lines omitted ...
total = 600 14002 25351427 N/A alive=1, dead=599 N/A
私はプログラマに渡すことができ、このリングに任意の鐘をしていたり任意のヒントを提供します:クラスの下の数は、数は増加しないコマンドのレポートは、何も不審なクラスローダはありませんか?彼らは、漏れを見つけることができないと言います。 JVMオプションを使用してこの漏れを止めることはできますか?
「MetaSpace」にのみ問題がありますか? 'ヒープ 'はどう?あなたは 'Java'プロセスメモリ使用量統計も提供できますか? –
メタスペースのみ、ヒープは安定しており、いっぱいではありません。正確な統計は何ですか? – kubanczyk
私は、Javaプロセスのメモリ使用量がどのくらい高速になるのかを意味しますか? –