Java堆外内存泄露分析

查看堆内存占用正常,jvm垃圾回收也没有异常。而top出来显示java占用内存是几个G,那么可能想到了是堆外内存泄漏。

需要安装google-perftools工具进行分析

1.先安装g++

不然编译会报错:g++: command not found

# yum -y install gcc gcc-c++
----

2.安装libunwind

不建议版本>0.99据说有问题,这个需要FQ
# wgethttp://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz
# tar -xzvf libunwind-0.99.tar.gz
# cd libunwind-0.99
# ./configure  --prefix=/data0/java/deploy/google-perftools/local/libunwind
# make && make install
---------

3.安装gperftools

wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.5/gperftools-2.5.tar.gz
# tar -xzvf gperftools-2.5.tar.gz
# cd gperftools-2.5
# ./configure --prefix=/data0/java/deploy/google-perftools/local/gperftools-2.5/
# make && make install
-----------

4.使配置生效
# vim /etc/ld.so.conf.d/usr_local_lib.conf

新增以下内容按i
/data0/java/deploy/google-perftools/local/libunwind/lib
按esc再:wq! #保存退出
# /sbin/ldconfig  #执行此命令,使libunwind生效。 需要sudo权限
-------------------
5.加入环境变量
# export LD_PRELOAD=/data0/java/deploy/google-perftools/local/gperftools-2.5/lib/libtcmalloc.so
# export HEAPPROFILE=/data0/java/deploy/google-perftools/local/tmp/gzip
------
6.运行java程序

# java -classpath /xxx.jar com.xxx.xxx.HttpMain

就会在/data0/java/deploy/google-perftools/local/目录下生成heap文件


如果是持续运行的程序需要ctrl+c会生成dump文件。

7.分析函数调用
/data0/java/deploy/google-perftools/local/gperftools-2.5/bin/pprof --text /usr/lib/jdk/jdk1.8.0_161/bin/java /data0/java/deploy/google-perftools/local/tmp/gzip.0001.heap

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值