当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

一个load过高的故障排查案例

发表于: 2015-05-23   作者:cfyme   来源:转载   浏览:
摘要: 现象: 6台4核机器load 全部在30以上,cpu使用us在90%, mem使用在90%,swap使用了100K,机器缓慢,前台浏览器页面打开缓慢,超时后白屏。措施: top, shift+h ,shift + p, 找出消耗cpu时间最多的线程ID,dump 堆栈信息,找到该线程,看在做什么,发现有多个线程在执行同一个方法。该方法内有一个循环,从一个node节点向上找其父节点,并不断将该节点数

现象: 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找出可能的内存泄漏。

 

转载地址:http://religiose.iteye.com/blog/1488806

一个load过高的故障排查案例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号