记一次内存泄漏的排查方案

背景:
    项目在一次转测的之后,没过多久调用接口响应时间明显增长,甚至出现接口超时。
在测试服务器上使用top命令查看发现,cpu持续飙升至300%,且内存近乎满负荷。重启
tomcat之后情况还是得不到缓解。怀疑发生内存泄漏,或者是代码中有死循环;
排查步骤:
1、登录到测试服务器上,使用jps 查看jvm进程号<pid>;
2、使用命令jmap -dump:format=b,file=heap.bin <pid>生成jvm内存dump文件;
3、将dump文件下载下来,使用配置较高的计算机解析dump文件。使用jdk自带的工具jhat或者其他工具也行,jhat -J-Xmx512m heap.bin
    -Xmx512m 是设置jvm堆内存大小,如果dump文件比较大就设置大一点
    当命令行提示:Snapshot resolved.Started HTTP server on port xxx
4、按照命令行的提示,访问该端口,会进入到web页面,点下面那个show instance count for all classes 可以查看当时jvm里面对象对应的class,查看异常对象,可以分析出发生泄漏的位置;
5、使用专业的内存分析工具,MAT等可以查看对象之间的引用关系,能更加准确的确定发生泄漏的位置。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值