1

サーバーが停止する可能性のあるメモリリークの可能性について最初に調査しました。ログから次のことがわかります。

...
6676.590: [GC [PSYoungGen: 61432K->3902K(65408K)] 343313K->308460K(384896K), 0.0153165 secs] [Times: user=0.07 sys=0.10, real=0.02 secs] 
6684.493: [GC [PSYoungGen: 65406K->3900K(67200K)] 369964K->319251K(386688K), 0.0104186 secs] [Times: user=0.07 sys=0.04, real=0.01 secs] 
6684.503: [Full GC [PSYoungGen: 3900K->0K(67200K)] [PSOldGen: 315351K->256886K(333824K)] 319251K->256886K(401024K) [PSPermGen: 70248K->70248K(116736K)], 0.5965072 secs] [Times: user=0.60 sys=0.00, real=0.60 secs] 
6692.773: [GC [PSYoungGen: 63296K->1160K(62976K)] 320182K->258046K(396800K), 0.0043468 secs] [Times: user=0.04 sys=0.00, real=0.00 secs]
...

私を混乱させるのは、どの世代でメモリリークを探すべきかということです。すべて?個別にまたは同時に?

4

1 に答える 1

3

フル GC の後で PSOldGen を調べるだけで済みます。一定期間保持されるオブジェクトはそこにあります。つまり、リークを探すときに、存続期間の短いオブジェクトについて心配する必要はありません。

リークがあると思われる場合は、 を見て、jmap -histo:liveどのオブジェクトが最も保持されているかを確認してください。でフル ダンプを実行してjmap -dump:live,format=b,file={filename}、これらのオブジェクトが保持されている理由を確認できます。このファイルは、VisualVM でロードできます。(VisualVM を使用してヒープ ダンプをトリガーすることもできます)

于 2012-11-15T13:20:17.597 に答える