堆内存泄漏移除导致tcp链接异常高
故障现象:
1:活动前端Nginx服务器TCP连接数到1万多
2:活动后端Tomcat其中1台TCP连接数达4千,并且CPU瞬间到780%(配置8核16G),内存正常
3:重启后端Tomcat后,TCP连接数正常,但是持续1~2天,TCP连接数暴增,仍需再次重启
故障分析:
Tomcat服务器TCP连接数上升,并发现象
1:Tomcat服务器内存异常,每次重启后一段时间内存使用到一定阶段后出现问题
2:Tomcat服务器top命令,服务进程异常,占用内存到4.4G后,出现CPU使用异常飙升
故障分析结论
1:Tomcat堆内存使用出现问题,GC资源回收次数增长和回收时长增加,最终导致CPU资源异常和TCP连接数飙升
故障分析结论验证
验证方法:
- 监控Tomcat服务JVM堆内存使用情况
- Tomcat启动脚本添加 JAVA_OPTS="-Dfile.encoding=utf-8 -javaagent:/home/tomcat_games/lib/jmxtrans-agent-1.2.6.jar=/home/tomcat_games/conf/jmxtrans-agent.xml" 并将数据收集到elasticsearch
- HEAP内存使用数据绘图如下: 堆内存使用超过最大允许值,直线下降部分是服务重启
故障定位:
查找具体什么原因导致堆内存无法释放
故障定位方法一:
jmap -histo:live pid |head -n 100 //查看class类使用内存排比,如下图:
可以看到很多HashMap实例很多,而且占用大量内存,其中一个占用了将近1G内存
备注:这些发给开发排查代码,但对于开发无法具体到业务代码层面,这些都是基础class,需要进一步定位问题
故障定位方法二:
jmap -dump:format=b,file=jmap.log pid //dump一个二进制文件,使用工具JProfiler分析
JProfiler下载地址:http://www.jb51.net/softs/545157.html
参考:https://www.cnblogs.com/yjd_hycf_space/p/7743049.html Jprofiler软件9.2.1版本 注册码破解
下面第2张图片,具体到一个工具类没有释放OSS连接,导致内存没有释放,内存使用占比高,
开发修复这个问题后,对外活动已经连续3天没有重启服务,并且堆内存使用和GC没有异常
故障总结
1:该故障现象持续了有一段时间,对Tomcat的JVM理解不足
2:问题定位需要持续总结,善于使用工具验证和分析,同时需要定位到具体问题,帮助研发尽快解决问题
备注:该问题解决研发发布了3个版本
- jmxtrans-agent参考:https://github.com/jmxtrans/jmxtrans-agent
最新文章
- Linux下vim 开发环境配置及配色(Ruby)
- 使用Ant自动化我们的java项目生成
- 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)
- 老项目的#iPhone6与iPhone6Plus适配#LaunchImage适配
- 【转】MYSQL入门学习之十三:自定义函数的基本操作
- PHP环境出现时区问题
- 同源策略与JSONP
- maven中在本地maven仓库添加jar包
- JAVA的字符编码及问题
- vue.js+socket.io+express+mongodb打造在线聊天[二]
- SVN常用命令备注
- 分组\聚合\F\Q查询
- vi十六进制编辑
- linux文件属性的10个字符各代表什么意思
- eclipse中设置项目的编码方式
- JSONObject 自定义过滤配置
- Git 查看提交历史(分布式版本控制系统)
- MySQL 批量删除相同前缀的表
- FILTER:progid:DXImageTransform.Microsoft.Gradient使用
- salt-api起不来:ImportError('No module named wsgiserver2',)
热门文章
- GSAP JS基础教程--TweenLite操作元素的相关属性
- hadoop的Map阶段的四大步骤
- IIS6独立用户建立网站的方法,提高网站安全性
- Cesium添加水面
- flask操作mongo两种方式--常规
- 深入浅出MFC——MFC程序的生死因果(三)
- 如何判断一个请求为ajax请求?
- thinkphp3.2 实现点击图片或文字进入内容页
- 嵌入式系统C编程之堆栈回溯(二)
- 【EF框架异常】System.MissingMethodException:“找不到方法:“System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration