前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次内存泄漏排查

记一次内存泄漏排查

作者头像
OPice
发布2019-11-19 15:54:16
4500
发布2019-11-19 15:54:16
举报
文章被收录于专栏:D·技术专栏D·技术专栏

1、现象

httpclient一只read time out,使用jmx 产看内存是每天都在上升的。

2、保存现场

jstack pid > jstack.log 保存栈日志 jmap -dump:format=b,file=heap.log pid 保存堆日志

3、止血(如果不需要可先排查问题)

重启应用,回复服务,先止血。或者不影响服务的话可以直接连上服务器分析,不用分析日志。

4、分析排查

两种方案:

  • 分析日志 grep 'java.lang.Thread.State' jstack.log | wc -l 查看栈的数量 grep -A 1 'java.lang.Thread.State' jstack.log | grep -v 'java.lang.Thread.State' | sort | uniq -c |sort -n
  • 查看栈的状态 使用 MAT 分析 jvm heap ,下载堆 dump 文件 堆文件都是一些二进制数据,在命令行查看非常麻烦,Java 为我们提供的工具都是可视化的,Linux 服务器上又没法查看,那么首先要把文件下载到本地。 由于我们设置的堆内存为 4G,所以 dump 出来的堆文件也很大,下载它确实非常费事,不过我们可以先对它进行一次压缩。 gzip 是个功能很强大的压缩命令,特别是我们可以设置 -1 ~ -9 来指定它的压缩级别,数据越大压缩比率越大,耗时也就越长,推荐使用 -6~7, -9 实在是太慢了,且收益不大,有这个压缩的时间,多出来的文件也下载好了
  • 服务器上即时排查 1、top 查看服务器内存硬盘状况 2、jinfo pid 查看java 内存情况 3、jstat -gcutil [pid] 60000 查看从程序启动到现在进行了多少FGC,查看下old区百分比 jmap -histo:live [pid] >f 打印堆内存存活对象信息 vi f

5、定位问题

根据第四步分析出具体oom对象,发现一个connectManager被放到了map中,map的clear是跟httpclient shutDown一块的。但是项目原因,封装的阿里云 apachHttpclient,每次的ak和sk不一样所以每次创建一个新的client,所以map一直在增加没有被释放。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、现象
  • 2、保存现场
  • 3、止血(如果不需要可先排查问题)
  • 4、分析排查
  • 5、定位问题
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档