故障现象:

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连接数飙升

故障分析结论验证

验证方法:


故障定位:

查找具体什么原因导致堆内存无法释放

故障定位方法一:

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个版本

最新文章

  1. Linux下vim 开发环境配置及配色(Ruby)
  2. 使用Ant自动化我们的java项目生成
  3. 【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)
  4. 老项目的#iPhone6与iPhone6Plus适配#LaunchImage适配
  5. 【转】MYSQL入门学习之十三:自定义函数的基本操作
  6. PHP环境出现时区问题
  7. 同源策略与JSONP
  8. maven中在本地maven仓库添加jar包
  9. JAVA的字符编码及问题
  10. vue.js+socket.io+express+mongodb打造在线聊天[二]
  11. SVN常用命令备注
  12. 分组\聚合\F\Q查询
  13. vi十六进制编辑
  14. linux文件属性的10个字符各代表什么意思
  15. eclipse中设置项目的编码方式
  16. JSONObject 自定义过滤配置
  17. Git 查看提交历史(分布式版本控制系统)
  18. MySQL 批量删除相同前缀的表
  19. FILTER:progid:DXImageTransform.Microsoft.Gradient使用
  20. salt-api起不来:ImportError('No module named wsgiserver2',)

热门文章

  1. GSAP JS基础教程--TweenLite操作元素的相关属性
  2. hadoop的Map阶段的四大步骤
  3. IIS6独立用户建立网站的方法,提高网站安全性
  4. Cesium添加水面
  5. flask操作mongo两种方式--常规
  6. 深入浅出MFC——MFC程序的生死因果(三)
  7. 如何判断一个请求为ajax请求?
  8. thinkphp3.2 实现点击图片或文字进入内容页
  9. 嵌入式系统C编程之堆栈回溯(二)
  10. 【EF框架异常】System.MissingMethodException:“找不到方法:“System.Data.Entity.ModelConfiguration.Configuration.PrimitivePropertyConfiguration