文档章节

cpu负载过高案例,解决方法记录

-悟空-
 -悟空-
发布于 2015/08/20 08:46
字数 870
阅读 2090
收藏 21

先讲下问题来源,前一段时间线上服务器负载高的吓人,作为一台只部署了tomcat的应用服务器,平时load average 也就在零点几的水平,突然达到十几真是让人惊了个呆(⊙ˍ⊙),生怕服务器分分钟宕掉啊。

赶紧找问题发生原因吧,我以前没有遇到过这类问题,没啥经验可谈,首先服务器上top下,发现最耗cpu的就是我们的应用服务器,如图:

负载高

我马上想到的是我们有异步处理的多线程程序,是不是哪个程序死锁了或者一直跑着,不释放。于是查看了最近修改的代码,也没有发现那里可能会发生死循环,那干脆打印下堆栈看看到底都有什么线程在跑着吧。到jdk的bin路径下 用jstack pid >xxx.stack命令打印堆栈内容。

堆栈

快1MB的内容,真的没法去找,都是一些TIMED_WAITINGWAITING这些可以先不用去看,优先级高的应该是那些RUNNABLE的,因为都已经等待了,就消耗不到cpu了啊。看了半天也没看出啥名堂,最后在其他博客上取取经,发现了实用的技巧。

具体思路:

首先要找到哪几个线程在占用cpu,之后再通过线程的id值在堆栈文件中查找具体的线程,看看出来什么问题。

OK,实战开始,第一个命令

ps -mp pid -o THREAD,tid,time

其中pid 换成要查看的进程的id值,这个命令的作用就是打印出进程下有哪几个线程在跑,并且分别占用cpu多长时间。

ps不熟悉话,可以在linux下查看man ps文档,看看具体那几个命令的作用

-p的后面跟着要显示的进程的id号, -m的意思是显示这个进程下的所有线程 -o的意思是格式化要输出的内容

通过上边这个命令,显示出一堆线程,通过筛选之后发现了几个占用cpu很长的线程

%CPUTIDTIME
17.31617212:18:58
79.9162752-08:49:22
19.841812:16:02
32.61307112:17:14

这下可算找到罪魁祸首了,看第二个线程cpu占用的吓人,并且占用时间也是高的离谱,我记住它了( *⊙~⊙)。

第二个命令,将找到的线程id号转成十六进制

printf "%x\n" tid

这个很简单,就不解释了,得到结果是3f93

之后就是在最初打印的堆栈信息中查找这个线程,Bingo!

bug_problem

请原谅,把关键信息注释上了,哈哈。找到这个线程,可以看到具体出问题的代码行了,对就是我注释那几个代码行,之后就在源码中查找下,发现真的有一个死循环在那里(⊙﹏⊙)b,好了既然找到了那就fix掉就可以了。

在一次上线之后服务器的情况:

fix_bug

又健健康康的啦~~~。

结尾再费点唾沫,查找好cpu的线程时一共有四个,其实那三个我也找了,发现是我们自己创建的线程池,所以不是问题啦。

参考文章: 线上应用故障排查之一:高CPU占用

© 著作权归作者所有

共有 人打赏支持
-悟空-

-悟空-

粉丝 143
博文 25
码字总数 35562
作品 0
海淀
高级程序员
私信 提问
无法连接windows实例的问题排查

无论何种原因导致无法远程连接实例,先尝试用阿里云提供的远程连接功能进行连接,然后再按原因分类进行故障排查。 1. 客户端本地网络异常 故障现象:用户无法登录外网。 可能原因:网卡驱动未...

lulullll
11/10
0
0
程序占用cpu过高问题解决

现象:登录机器发现有卡顿现象,于是top发现负载特别高,并且发现一进程占满cpu 定位:记录下该进程号,然后top -Hp <pid>找出占用cpu过高的几个线程,记录线程id,根据这几个线程id到程序线...

Small-Liu
2016/06/16
99
0
hadoop 1.X资源管理机制缺陷分析和解决方案

一、概述 用hadoop1.x版本已经有一年多了,在使用的过程中发现hadoop1.X的资源管理机制存在诸多缺陷,甚至在这种资源管理机制下会造成服务器资源的严重浪费,负载过高或者过低。本文主要介绍...

zengzhaozheng
07/02
0
0
swift部署多proxy并实现负载均衡

5台服务器 A B C D E A为负载均衡 BCDE 既做proxy server 又做storage server 负载均衡工具的选择: nginx:0.6.33版本后不允许POST方法访问静态资源,swift 只有head get方法能用,post pu...

长平狐
2013/11/25
199
0
Linux 问题故障定位,看这一篇就够了

1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及...

技术小能手
前天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0
深入理解Plasma(四):Plasma Cash

这一系列文章将围绕以太坊的二层扩容框架,介绍其基本运行原理,具体操作细节,安全性讨论以及未来研究方向等。本篇文章主要介绍在 Plasma 框架下的项目 Plasma Cash。 深入理解Plasma(1):...

HiBlock
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部