故障现象:
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
堆内存泄漏移除导致tcp链接异常高的更多相关文章
-
MAT工具定位分析Java堆内存泄漏问题方法
一.MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题.该工具提供了两种使用方式,一种是插件版,可以安装到Eclips ...
-
JVM的堆内存泄漏排查-性能测试
JVM异常说明 https://testerhome.com/articles/24259 一文中已介绍了,JVM每个运行时区域--程序计数器 .Java虚拟机栈.本地方法栈.Java堆.方法区.直接 ...
-
性能测试之JVM的故障排查-堆内存泄漏
JVM异常说明(超链接) 一文中已介绍了,JVM每个运行时区域--程序计数器 .Java虚拟机栈.本地方法栈.Java堆.方法区.直接内存发生OutOfMemoryError的不同原因和不同错误信息. ...
-
[BUGCASE]Webpack打包报JavaScript堆内存泄漏的错误
一.问题描述 执行npm run build之后报错: 报错信息: FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript he ...
-
TCP链接异常断开后,对端仍然ESTABLISH
双方建立TCP链接,其中一方拔掉网线,另一端依然是ESTABLISHED,那么要过多长时间才会发觉链接被断开了呢? [root@node1 ~]# sysctl -a |grep keepalive ...
-
.NET 垃圾回收与内存泄漏
> 前言相信大家一定听过,看过甚至遇到过内存泄漏.在 .NET 平台也一定知道有垃圾回收器,它可以让开发人员不必担心内存的释放问题,因为它会自定管理内存.但是在 .NET 平台下进行编程,绝对不 ...
-
C/C++内存泄漏及检测 转
C/C++内存泄漏及检测 2011-02-20 17:51 by 吴秦, 30189 阅读, 13 评论, 收藏, 编辑 “该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏, ...
-
Android内存泄漏的检测流程、捕捉以及分析
https://blog.csdn.net/qq_20280683/article/details/77964208 Android内存泄漏的检测流程.捕捉以及分析 简述: 一个APP的性能,重度关乎 ...
-
【转】C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败.内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用ma ...
随机推荐
-
React Native知识2-Text组件
Text用于显示文本的React组件,并且它也支持嵌套.样式,以及触摸处理.在下面的例子里,嵌套的标题和正文文字会继承来自styles.baseText的fontFamily字体样式,不过标题上还附加 ...
-
NSScanner知悉 (转)
http://blog.csdn.net/likendsl/article/details/7974761 NSScanner是一个类,用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的 ...
-
vs2013创建mvc项目体系找不到指定文件
在Visual Studio 2013中创建新MVC项目,(2013默认创建的就是mvc5的项目) 断定后提示,体系找不到指定的文件.(Exception HRESULT:08x0070002): 究 ...
-
CloudXNS首次使用体验
第一步:申请域名 对于从事IT行业的同学,有一个属于自己的域名是一件再正常只是的事情了. 没有,都不好意思说自己是搞机的.赶紧去新网.万网申请一个吧. 第二步:配置域名DNS 域名解析须要用到域名se ...
-
转: object 和embed 标签播放flash
一.介绍: 我们要在网页中正常显示flash内容,那么页面中必须要有指定flash路径的标 签.也就是OBJECT和 EMBED标签.OBJECT标签是用于windows平台的IE浏览器的,而EMBE ...
-
JAVA中Singleton的用法
Java Singleton模式属于管理实例化过程的设计模式家族.Singleton是一个无法实例化的对象.这种设计模式暗示,在任何时候,只能由JVM创建一个Singleton(对象)实例. JAVA ...
-
方差分析 | ANOVA | 原理 | R代码 | 进阶 | one way and two way
原理 比较两组就用t-test,比较三组及以上就用ANOVA.注意:我们默认说的都是one way ANOVA,也就是对group的分类标准只有一个,比如case和control(ABCD多组),tw ...
-
你真的了解restful api吗?
前言 在以前,一个网站的完成总是“all in one”,页面,数据,渲染全部在服务端完成,这样做的最大的弊端是后期维护,扩展极其痛苦,开发人员必须同时具备前后端知识.于是慢慢的后来兴起了前后端分离的 ...
-
hdu 5385 The path
http://acm.hdu.edu.cn/showproblem.php?pid=5385 题意: 给定一张n个点m条有向边的图,构造每条边的边权(边权为正整数),令d(x)表示1到x的最短路,使得 ...
-
js 常用事件
onclick 事件会在对象被点击时发生. 请注意, onclick 与 onmousedown 不同.单击事件是在同一元素上发生了鼠标按下事件之后又发生了鼠标放开事件时才发生的. 如:点击验证码时进 ...