一个load过高的故障排查案例
编程技术  /  houtizong 发布于 3年前   84
现象: 6台4核机器load 全部在30以上,cpu使用us在90%, mem使用在90%,swap使用了100K,机器缓慢,前台浏览器页面打开缓慢,超时后白屏。
措施: top, shift+h ,shift + p, 找出消耗cpu时间最多的线程ID,dump 堆栈信息,找到该线程,看在做什么,发现有多个线程在执行同一个方法。该方法内有一个循环,从一个node节点向上找其父节点,并不断将该节点数据放入List,猜测该节点的父节点ID肯定与该节点形成死循环了,导致while不能跳出。修改代码限制向上寻找的层级,达到一定数量后,从循环中跳出,重新发布后,问题解决。
总结:1,排查cpu消耗类故障方法。
1)top shift+h shift+p ,找到java 进程编号,在列出所有线程按cpu消耗排序,找到执行时间最长的线程ppid。
2)java/bin/jstack PID > /tmp/jstack.log 导出堆栈信息。
3)将10进制的PID转换成16进制(a-f字符要小写),在该文件中寻找该16进制的PPID,并查看该线程堆栈信息,看这些线程在做什么。
4)找到堆栈中对应代码查看,是否有消耗cpu的大循环,修改,发布会解决问题。
2,同时,如果内存消耗过大导致频繁full gc,可以按照如下方法排查:
1)使用jmap dump jvm内存到指定目录,可引起full GC , 慎重操作。
2)使用ftp或其他方法,将文件拉到本地机器。使用mat,分析堆内存,利用leak suspect找出可能的内存泄漏。
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接