zoukankan      html  css  js  c++  java
  • 堆内存泄漏移除导致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连接数飙升

    故障分析结论验证

    验证方法:


    故障定位:

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

    故障定位方法一:

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

  • 相关阅读:
    写的好的功能参考地址
    碰撞检测原理
    懒加载原理的实现
    jQuery图片延迟加载插件jQuery.lazyload 的使用
    电子工厂生产楼职位解析
    打印条码方式
    条码打印二
    条码打印三
    CSS实现圆角矩形
    条码打印四
  • 原文地址:https://www.cnblogs.com/zhengchunyuan/p/8549751.html
Copyright © 2011-2022 走看看