怎么排查CPU飙升
怎么排查CPU飙升
线上有些系统,本来跑的好好的,突然有一天就会出现报警,CPU使用率飙升,然后重启之后就好了。例如,多线程操作一个线程不安全的list往往就会出现这种现象。那么怎么定位到具体的代码范围呢?今天笔者就教大家一个小技巧
代码准备
这次,笔者准备了一个demo代码,大致线程模型是这样的:
代码下所示:public class CpuHighExample {
public static voidcpuHigh {
final List list = new LinkedList<>;
Thread thread1 = new Thread(newRunnable {
@Override
public voidrun {
int count = 1;
while (true) {
// 构造thread1为消耗很高cpu的线程
count = count + 1;
}
}
});
thread1.setName("thread1");
Thread thread2 = new Thread(newRunnable {
@Override
public voidrun {
while (true) {
try {
// 构造thread2为消耗很低cpu的线程
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace;
}
}
}
});
thread2.setName("thread2");
thread1.start;
thread2.start;
}
}
案例运行
这个案例一运行,就听见笔者的电脑风扇起飞了,呼呼作响。直接top一下
果然是java进程,占用最高,CPU 100%了(占用了一个核),而其PID是2717,正是我们跑的例子。那么下一步,我们就需要定位到底是那一个线程在耗CPUtop -H
Threads toggle
Starts top with the last remembered ’H’ state reversed. When this
toggle is On, all inpidual threads will be displayed. Other-
wise, top displays a summation of all threads in a process.
如man文档所描述,top -H可以打印出线程信息,我们就top -H一下。
图中可以看到,占用最高的线程PID是2727,同时线程名是thread1。
继续jstack
我们知道jstack可以dump出jvm所有线程运行的快照,然后我们就可以通过刚才获取的PID去定位到jstack那个进程。// 注意,这边用top出来的进程号2717,而不是top -H出来的2727
jstack 2717 > 1.txt
由于jstack打印出的线程号是以16进制的形式表现的,所以我们对2727的线程号做一次转换,得到aa7。
然后我们在1.txt中搜索2727,这里用的是less然后进去后搜索,而不是用grep。因为这样比较直观的能看出之前和之后的信息。less下
我们找到aa7后,就直接能发现代码一直跑在CpuHighExample.java第19行上面。
当然了,我们需要多jstack几次,如果每次jstack出来都刚好在这段代码左右,那么基本可以证明,是这段代码导致CPU飙升了。
总结
CPU突然飙升这个问题,我们很容易通过top -H和jstack找到对应的代码范围,这无疑极大的缩小了我们的定位范围。
你的回应是积极的消极的,还是不回应呢有没有经历过叫别人三遍五遍不回应的尴尬场面?相信已婚女士大多都是资深体验者。老公,把垃圾倒了哈。即便对方口头上回应了你,可行动上却没有任何反应。反馈到我们身上的,何止是尴尬,更有心
秋季减肥蔬菜有哪些?这9种好吃且热量超低最近,喜欢吃蔬菜的人是越来越多啦不可否认,多吃素食蔬菜水果等富含纤维的食物,的确对减肥有帮助。下面给大家介绍9种有助于减肥的蔬菜,吃了可以瘦的哦机智01芹菜芹菜是常见的一种蔬菜,吃
逗比亲子对话(一)天气转冷了,叫小妞起床有点难度了。每天定的闹铃有啥用呢,响了你也不起。我有点不屑地说。闹铃可以让我知道不要再深睡眠了,因为深睡眠起床穿衣服时会很冷。丫丫同学振振有词地说。请教
不经意的一句话却让他人很受用被人夸赞是一种幸福,我有幸见识到了夸赞的更高水平。这20多年来,我一直从事营销培训管理工作,也算半个教育界的人士吧,教书育人答疑解惑,只不过我教的是销售界的成年人。哈哈O()O不敢
我吃过的人间美味对于一个不会做饭的人来说,有专人做饭,一日三餐供膳,已是人间最大的享受了!我,家有煮夫,厨房事务,妥妥滴做起了甩手掌柜,老公每日工作之余都在用心琢磨两件大事儿。一件是怎样做出更多美
如何处理孩子的哭闹真心地说,我不是特别喜欢孩子,尤其那种闹腾爱哭的娃,为啥?不让人消停呗,我这个人喜欢肃静。那你要问了,自家娃哭闹,总不能扔了吧。哈哈,亲生的,没办法,万能的方法必须有,那就是一个字
逗比小女趣事(2)老妈,吃完饭,我给你讲一件刚发生在班级里的事哈,现在讲有点影响食欲。从小就培养闺女爱分享的好习惯,让她知道父母永远都是支持她的最好的朋友。这样,遇到困难或做错事时,孩子才不会害怕让
娃不便秘,功劳也有火龙果小饼一份火龙果是一款红的发紫的水果颜色如此,名气也如此说到营养,它含有丰富的膳食纤维,经常食用可以预防便秘。还含有维生素C和胡萝卜素等想要宝宝变得越来越美吃点火龙果准没错!别看它口感甜度适
父母与孩子在心理上实现分离有一种冷,叫作奶奶说我冷。有一种饿,叫作奶奶说我饿。这话放在我家里,简直就是原创。因为我家婆婆就是这样的,一切以孙女为中心。感觉我这当妈的,自己都怀疑是不是亲娘。丫丫,今天吃了几个
我与情绪的深刻相处的体验有没有这样的体验感,当自己很有情绪时,去充分感受这份情绪,在收到了情绪带给我们的礼物后,整个人豁然开朗完全释怀。这份感觉,真好!早上醒来,打开手机,第一眼看到的就是学姐昨晚12点1
两个肠胃小帮手做蒸糕,香甜软糯,好吃到停不下来今日get苹果知识点生吃预防便秘,富含维生素C熟吃可以缓解腹泻今天吃可以填饱肚子山药知识点山药同样也是对人体非常有好处的食材,现在正当季,有健脾除湿的功效(而且低卡还饱腹,也很适合