如何使用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
参考
https://www.cnblogs.com/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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。