故障现象:
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 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