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

一个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

    震惊

    震惊

编辑推荐
近几天现场报故障过来,说A系统(java b/s应用,有较多后台线程处理任务)在现网占用系统资源非常严
近几天现场报故障过来,说A系统(java b/s应用,有较多后台线程处理任务)在现网占用系统资源非常严
一、背景: 先执行一个java程序里面开了两个线程分别都在while循环做打印操作。 # java -cp ./test-
我们通过了解TCP各个状态,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容) 1、TCP
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。 以我们最近出现的
1. pgrep 查询进程的工具 pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运
Windows Azure Services安装及故障排查 微软提供了自己的云管理平台 https://www.katalcloud.com 企
微软提供了自己的云管理平台 https://www.katalcloud.com 企业可以自己安装,并使用。网站如下: ht
现象: 李景发布laputa小需求,修改offer大图逻辑,调用search,重启不久出现cpu占用一度飙升到45左
以下内容由 [五四陈科学院]提供 jkiller 如果遇到线上java进程占用过多的cpu,可以用这个脚本来帮助
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号