如何使用Jemalloc跟蹤JVM堆外內存泄漏
編譯和安裝jemalloc
- git clone https://github.com/jemalloc/jemalloc

- git checkout stable-4
- ./autogen.sh
報錯
./autogen.sh: 5: ./autogen.sh: autoreconf: not found
上述報錯,主要是因為如下工具沒有安裝, ubuntu 可以執行如下命令,就可以解決
apt-get install autoconf automake libtool
- ./configure --enable-prof
- make
- sudo make install
cannot stat ‘doc/jemalloc.html’: No such file or directory
make install_bin install_include install_lib
查看so裝到哪兒去了
find / -name *jemalloc.so
使用
啟動jar之前設置下環境變量:
export LD_PRELOAD=/usr/local/lib/libjemalloc.so
export MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17,prof_final:true,prof_prefix:/usr/dump/jeprof.out
環境變量LD_PRELOAD用來替換原生的glibc malloc。 然后啟動jar,運行一段時間,停掉后會生成多個jeprof.{processId}的文件.
- lsof -n |grep 87657|grep jemalloc 這個指令是查看進程是否掛載某個動態庫

注意生成pdf時需要下面兩個依賴
apt-get install graphviz
apt install ghostscript
jeprof --show_bytes --pdf /usr/local/openjdk-8/jre/bin/java ./jeprof*.heap > ./x.pdf
這個指令一定要帶上java這個elf文件才行
最后有將近95%的內存來自于jvm本身,也由于運行時間不是很長,所以可以認為是安全的,如果再持續一段時間這個百分比降低了,說明有內存泄露的可能。
jeprof --show_bytes --pdf /usr/local/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java ./jeprof*.heap > ./x.pdf
export LD_LIBRARY_PATH=/home/zxf/openjdk7/build-debug/hotspot/outputdir/linux_i486_compiler1/jvmg/
export JAVA_HOME=/home/zxf/openjdk7/build-debug/j2sdk-image/
export CLASSPATH=.:/home/zxf/openjdk7/build-debug/j2sdk-image/lib:/home/zxf/openjdk7/build-debug/j2sdk-image/jre/lib
參考
http://www.rzrgm.cn/ylz8401/p/15960640.html
java新手自學群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/開發/運維)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
單片機嵌入式/電子電路入門群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系統研發群:15375777
匯編/輔助/破解新手群:755783453
大數據 elasticsearch 群 481975850
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號