2019独角兽企业重金招聘Python工程师标准>>>

排查了五六个小时,终于解决了GC的问题,记录一下希望可以帮到有需要的人,本文假定读者对GC知识有一定的了解 如果不了解可以先参考我的博客 https://my.oschina.net/chenxiaobian/blog/726840

1.背景说明

发生的问题是公司一台跑linux服务器上的应用,下午接到通知说整个服务挂了,于是登上服务器一看状态 发现服务是启动的,但是访问应用确实是没任何响应,于是通过命令top查看了一下cpu的运行状态,发现一个叫jetty的进程占用cpu 比例为100%,初步一看肯定是内存泄漏了

2.解决过程

于是通过命令查看一下JVM的配置参数

ps -ef|grep jetty|grep -v grep

查到

 -Xmx1536m -Xms1536m -Xmn576m -Xss512K -XX:PermSize=384m -XX:MaxPermSize=384m 

可以看到持久代被设置为384M,堆内存被设置为1536M(-Xms和--Xmx设为相等避免了“堆震荡”,能在一定程度减少GC次数,但会增加平均每次GC消耗的时间),年轻代被设置为576M

接下来分别一一进行排查

通过top命令可以查到占用内存最大的进程号

通过执行命令

jstat -gc 28048 250 4;//每250ms执行一次,一共4次

看了下堆中各代的占用情况和GC情况,发现了一个挺恐怖的现象:Eden区占用77%多,S0占用100%,Old和Perm区都有很大空间剩余

怀疑是新生代空间不足,但是没有确切证据,只好用jstack获取线程Dump信息 执行

jstack -F 28048

不看不知道,一看就发现了一个问题(没有发现线程死锁,这里应该是“活锁”问题)

从上面第一段可看到有一个Low Memory Detector系统内部线程(JVM启动的监测和报告低内存的守护线程)一直占着锁0x00....00,而下面的C2 CompilerThread1、C2 CompilerThread0、Signal Dispatcher和Surrogate Locker线程都在等待这个锁,导致整个JVM进程都hang住了

于是打算调大整个堆内存大小、调大新生代大小(-Xmn参数)、调大新生代中Survivor区占的比例(-XX:SurvivorRatio)

重启系统后用jstat -gcutil pid 1000命令发现一个更恐怖的现象,如下图:Eden区内存持续快速增长,Survivor占用依然很高,大概每两分钟就Young GC一次,并且每次Young GC后年老代内存占用都会增加不少,这样导致可以预测每三四个小时就会发生一次Full GC,这是很不合理的

于是我用

jmap -histo:live

(注意jmap命令会触发Full GC,并发访问量较大的线上环境慎用)查看了下活对象,发现有一些Integer数组和一些Character数组占用内存在持续增长,并且占了大概好几百M的内存,然后经过Young GC又下降,然后再次快速增长,再Young GC下降,周而复始

至此,我推测可能是大量的Integer数组对象和Character数组对象基本占满了Survivor,导致在Eden满了之后,新产生的Integer数组对象和Character数组对象不足以放入Survivor,然后对象被直接被Promote到了年老代,这种推测部分正确,它解释了S1占用那么高的原因,但不能解释上面的Eden区内存占用持续上升。

于是继续查看了下接口调用日志,不看不知道,一看吓一跳:日志刷新非常之快(99%是ERROR日志,原因就在于大量的系统接口调用触发了大量ERROR和DEBUG日志刷新,写日志对于线上系统是一个重量级操作,无论是对CPU占用还是对内存占用,所以高并发线上系统一定要记得调高日志级别为INFO甚至ERROR

于是通过jmap命令

jmap -dump:format=b,file=/tmp/dump.dat 20248

把文件dump下来通过heap analyzer打开分析发现是一个叫automsphere占用堆栈空间达92%以上,通过工具把dump.dat文件打开进行分析排查

通过后台ERROR日志发现一直在建立socketConnetion 连接,所以通过这里猜测肯定是程序中有问题,通过排查发现程序会有一个聊天功能需要用到automsphere

3.总结

需要说明一下,本文当中很多截图并不是当时现场的图,因为时间紧迫没来得及截图,本文是对这次事故的一次总结,推荐几篇不错的GC方面的文章

JVM内存管理:深入Java内存区域与OOM http://www.iteye.com/topic/802573

JVM内存管理:深入垃圾收集器与内存分配策略 http://www.iteye.com/topic/802638

GC实践总结 http://www.iteye.com/topic/473874

JVM内存的分配及回收 http://blog.csdn.net/eric_sunah/article/details/7893310

一步一步优化JVM系列 http://blog.csdn.net/zhoutao198712/article/category/1194642

转载于:https://my.oschina.net/chenxiaobian/blog/874632

生产环境GC故障解决过程记录相关推荐

  1. oracle有时慢连接不上,Oracle 连接有时候慢,应用稍微一忙,偶尔出现连接失败 的故障解决过程...

    ...[@more@]环境: IBM AIX5.3ML04(IBM P595)+HACPM5.2+Oracle10.2.0.2 RAC(2节点)+IBM 8100 存储 故障描述: - Oracle ...

  2. oracle修改卡顿,记一次生产环境卡顿优化过程:大事务并发回滚

    概述 最近生产环境有这么个现象,平时的订单调度只需要2s内可以出结果,但是多个人调度就会卡住,超过15分钟都没有结果出来,有时还会失败然后导致数据不准确. 下面记录一下生产环境卡顿时排查的过程. 1. ...

  3. ippbx出现单通故障解决过程总结

    公司售出的一套ippbx,下联iad,通过sip协议对接e1板卡,e1板通过dss1协议对接公网联通的程控交换机,反馈呼出电话接通后有一段时间被叫听不到声音,但过一段时间能恢复.还有问题是拨号后听到& ...

  4. 微软Microsoft Office 2016 (word、excel、ppt三件套)安装问题及解决过程记录

    Microsoft Office 2016 安装过程记录(真实 好用 个人强推) 链接:https://pan.baidu.com/s/1BA9DicDcJ3seQ49bwrNbIw  提取码:zjs ...

  5. JAVA面试生产环境常见问题及解决话术

    1.服务器断电导致虚拟机数据丢失的恢复方法 这道题比较偏运维,并不是我们开发的职能范围.对于3年以内的开发算是超纲的面试题了,这种题目的回答最好说自己没有权限操作服务器,或者说是组长负责,技术经理负责 ...

  6. 连接池配置oracle aix,一次AIX系统swap使用过高的故障解决过程

    今天早上回到办公室没多久就接到了新炬过来的电话,说我们的数据库服务器swap使用已经过了告警基准线,让我去看看应用是否还运行正常.于是赶紧登陆服务器查了一下swap的活动情况: [cramer@zhz ...

  7. Android 使用自带的HttpClient进行https请求出现403的解决过程记录

    2019独角兽企业重金招聘Python工程师标准>>> 出现的过程 最近在用程序模拟一个web站的https登录,然后进行一些后续操作的小玩意.先使用java程序写测试代码,测试通过 ...

  8. STlink无法下载?解决过程记录。

    先分析一波 现象 stlink直接下载失败,要么no target connected,要么internal command error,要么stlink connect error. 设备管理器里, ...

  9. Win10家庭中文版开机后弹窗无法登录到你的账户点注销没用(解决过程记录)

    问题:之前一切正常,用完电脑后关机,没有提示有更新,也没更改系统设置,注册表什么的.时隔两天后开机就直接进入了临时账户,并弹窗"无法登录到你的账户",下面提示"通常可以通 ...

最新文章

  1. hdu3549(网络流入门题-最大流的Ford-Fulkerson算法)
  2. Python中span()函数的作用
  3. Exchange2010中文版安装教程
  4. 【Ansible】Ansible 连接主机显示报错的处理方案
  5. could not find or load the Qt platform plugin windows的解决方法
  6. 几十个珍藏的网站,相信你会用到的
  7. 互联网晚报 | 06月14日 星期二 | 罗永浩称苹果有些产品明显退步;​旷视首席科学家孙剑博士去世;吉利拟收购魅族...
  8. 国际服务贸易重点整理
  9. Python之判断闰年
  10. 计算 变异系数 标准差 标准偏差 相关系数 平滑指数 回归系数等C++ 模板类
  11. 【5G RRC】Master Information Block (NR-MIB)
  12. 数据结构和算法基础(4)——树
  13. PHP:preg_match
  14. 高等数学(下)多元函数微分法及其应用
  15. 解析pubmed文献数据库的xml文章结构
  16. 二级计算机vb答案,计算机二级VB考试练习题及答案
  17. matlab绘制sintsinwt,sin(wt)中的t单位是
  18. 脚手架开发(2)-注册阶段
  19. 2008车展美女车模
  20. 飞歌导航软件测试,飞歌导航论坛App正式上线苹果应用商店App Store

热门文章

  1. Java 高并发面试题
  2. SpringBoot第七篇:springboot开启声明式事务
  3. 如何阅读一份深度学习项目代码?
  4. 从中科院到BAT,如何准备秋招那件事儿(附B站录播)
  5. 计算机科学和Python编程导论(六) 测试与调试
  6. 2202年了,AI还是不如猫!图灵奖得主Yann LeCun:3大挑战依然无解
  7. 13个你一定要知道的PyTorch特性
  8. 14岁清华本科新生免试直博!高校新生大数据陆续曝光,男女比例、年龄差距各异......
  9. 机翻降重?掩饰抄袭?SCI期刊上的这些「奇言怪语」,不少来自中国作者
  10. B站项目资源过于敏感,2h后删,抓紧保存!!!