天天看點

JVM堆外記憶體分析

JVM堆外記憶體分析

@Date 2017.07.20

事件回顧

在對應用進行壓測的時候,觀察實體記憶體占用以及JVM堆中對象情況,發現實體記憶體占用很大,堆中對象卻很少.懷疑是堆外記憶體占用問題.

工具介紹(gperftools)
  • 下載下傳工具libunwind-1.0.tar.gz和gperftools-2.5.tar.gz并進行編譯安裝(具體可以查找教程)
  • 在安裝之後并配置好gperf路徑
  • 在JVM啟動應用之前,執行以下指令
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
export HEAPPROFILE=/home/admin/logs/pro
           
  • 會在HEAPPROFILE指定的目錄中生成.heap檔案
  • 使用以下指令可以檢視堆外記憶體檔案的構成(支援導出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預設顯示方法占用,但是有的時候隻顯示内催位址,不顯示具體方法,不容易排查,則可以用下面的工具dump出來記憶體位址和方法的一個關系.生成的是16進制的起始位址和16程序的位址長度.可以寫個腳本計算之後與pprof結果對比
https://github.com/jvm-profiling-tools/perf-map-agent