JVM堆外內(nèi)存分析
@Date 2017.07.20
事件回顧
在對(duì)應(yīng)用進(jìn)行壓測(cè)的時(shí)候,觀察物理內(nèi)存占用以及JVM堆中對(duì)象情況,發(fā)現(xiàn)物理內(nèi)存占用很大,堆中對(duì)象卻很少.懷疑是堆外內(nèi)存占用問題.
工具介紹(gperftools)
- 下載工具libunwind-1.0.tar.gz和gperftools-2.5.tar.gz并進(jìn)行編譯安裝(具體可以查找教程)
- 在安裝之后并配置好gperf路徑
- 在JVM啟動(dòng)應(yīng)用之前,執(zhí)行以下命令
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
export HEAPPROFILE=/home/admin/logs/pro
- 會(huì)在HEAPPROFILE指定的目錄中生成.heap文件
- 使用以下命令可以查看堆外內(nèi)存文件的構(gòu)成(支持導(dǎo)出gif或者pdf)
pprof --text /opt/taobao/install/ajdk-8.2.3-b46/bin/java pro_149025.0001.heap
pprof --pdf /opt/taobao/install/ajdk-8.2.3-b46/bin/java pro_149025.0001.heap > xxx.pdf
- pprof默認(rèn)顯示方法占用,但是有的時(shí)候只顯示內(nèi)催地址,不顯示具體方法,不容易排查,則可以用下面的工具dump出來內(nèi)存地址和方法的一個(gè)關(guān)系.生成的是16進(jìn)制的起始地址和16進(jìn)程的地址長(zhǎng)度.可以寫個(gè)腳本計(jì)算之后與pprof結(jié)果對(duì)比
https://github.com/jvm-profiling-tools/perf-map-agent