> 事件回顧
在對應用進行壓測的時候,觀察物理內存占用以及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 /bin/java pro_149025.0001.heap
pprof --pdf /bin/java pro_149025.0001.heap > xxx.pdf
```
* pprof默認顯示方法占用,但是有的時候只顯示內催地址,不顯示具體方法,不容易排查,則可以用下面的工具dump出來內存地址和方法的一個關系.生成的是16進制的起始地址和16進程的地址長度.可以寫個腳本計算之后與pprof結果對比
```
開源工具地址 : github.com/jvm-profiling-tools/perf-map-agent
```