Java程序內(nèi)存分析:JMap與Eclipse Memory Analyzer - COD...
Java程序內(nèi)存分析:JMap與Eclipse Memory Analyzer當(dāng)程序中內(nèi)存使用過(guò)多,或者存在內(nèi)存泄露時(shí),經(jīng)常會(huì)報(bào)OutOfMemory錯(cuò)誤。很多時(shí)候,尤其是在生產(chǎn)環(huán)境中,不得不馬上重啟服務(wù),導(dǎo)致現(xiàn)場(chǎng)丟失,無(wú)法查找問(wèn)題所在。
其實(shí)jdk中自帶了很多分析監(jiān)控工具,jmap就是其中之一。
當(dāng)程序出現(xiàn)問(wèn)題,先不要停止服務(wù),先用ps看一下java的pid, 然后運(yùn)行命令將內(nèi)存導(dǎo)出來(lái):
[Copy to clipboard]View Code BASH
/usr/local/jdk1.6.0_20/bin/jmap -dump:format=b,file=/dir/heap.bin
這個(gè)heap.bin就是當(dāng)前內(nèi)存中的內(nèi)容。如果很大,可以用gzip壓縮一下。
此時(shí)就有很多工具來(lái)分析heap.bin了,我使用的是
eclipse memory analyzer 。具體使用方法比較簡(jiǎn)單,里面可以看到每個(gè)對(duì)象的占用情況。
上兩個(gè)我的程序出問(wèn)題時(shí)的截圖:
通過(guò)這兩個(gè)圖,很容易就定位出了Cache里的filter變量有問(wèn)題。
我的實(shí)踐中,改進(jìn)之后,內(nèi)存占用從1G下降到了60多M。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。