成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

怎么排查CPU飆升

商務(wù)辦公
線上有些系統(tǒng),本來(lái)跑的好好的,突然有一天就會(huì)出現(xiàn)報(bào)警,CPU使用率飆升,然后重啟之后就好了。例如,多線程操作一個(gè)線程不安全的list往往就會(huì)出現(xiàn)這種現(xiàn)象。

 [[345730]]

怎么排查CPU飆升

線上有些系統(tǒng),本來(lái)跑的好好的,突然有一天就會(huì)出現(xiàn)報(bào)警,CPU使用率飆升,然后重啟之后就好了。例如,多線程操作一個(gè)線程不安全的list往往就會(huì)出現(xiàn)這種現(xiàn)象。那么怎么定位到具體的代碼范圍呢?今天筆者就教大家一個(gè)小技巧

代碼準(zhǔn)備

這次,筆者準(zhǔn)備了一個(gè)demo代碼,大致線程模型是這樣的:

 

代碼下所示:

  1. public class CpuHighExample { 
  2.  
  3.     public static void cpuHigh() { 
  4.         final List<String> list = new LinkedList<>(); 
  5.         Thread thread1 = new Thread(new Runnable() { 
  6.             @Override 
  7.             public void run() { 
  8.                 int count = 1; 
  9.                 while (true) { 
  10.                     // 構(gòu)造thread1為消耗很高cpu的線程 
  11.                     count = count + 1; 
  12.                 } 
  13.             } 
  14.         }); 
  15.         thread1.setName("thread1"); 
  16.         Thread thread2 = new Thread(new Runnable() { 
  17.             @Override 
  18.             public void run() { 
  19.                 while (true) { 
  20.                     try { 
  21.                         // 構(gòu)造thread2為消耗很低cpu的線程 
  22.                         Thread.sleep(1000); 
  23.                     } catch (InterruptedException e) { 
  24.                         e.printStackTrace(); 
  25.                     } 
  26.                 } 
  27.             } 
  28.         }); 
  29.         thread2.setName("thread2"); 
  30.         thread1.start(); 
  31.         thread2.start(); 
  32.     } 

案例運(yùn)行

這個(gè)案例一運(yùn)行,就聽(tīng)見(jiàn)筆者的電腦風(fēng)扇起飛了,呼呼作響。直接top一下

 

果然是java進(jìn)程,占用最高,CPU 100%了(占用了一個(gè)核),而其PID是2717,正是我們跑的例子。那么下一步,我們就需要定位到底是那一個(gè)線程在耗CPU

  1. top -H 
  2. Threads toggle 
  3.             Starts top with the last remembered ’H’ state reversed.  When this 
  4.             toggle  is  On,  all individual threads will be displayed.  Other- 
  5.             wise, top displays a summation of all threads in a process. 

如man文檔所描述,top -H可以打印出線程信息,我們就top -H一下。

 

圖中可以看到,占用最高的線程PID是2727,同時(shí)線程名是thread1。

繼續(xù)jstack

我們知道jstack可以dump出jvm所有線程運(yùn)行的快照,然后我們就可以通過(guò)剛才獲取的PID去定位到j(luò)stack那個(gè)進(jìn)程。

  1. // 注意,這邊用top出來(lái)的進(jìn)程號(hào)2717,而不是top -H出來(lái)的2727 
  2. jstack 2717 > 1.txt 

由于jstack打印出的線程號(hào)是以16進(jìn)制的形式表現(xiàn)的,所以我們對(duì)2727的線程號(hào)做一次轉(zhuǎn)換,得到aa7。

 

然后我們?cè)?.txt中搜索2727,這里用的是less然后進(jìn)去后搜索,而不是用grep。因?yàn)檫@樣比較直觀的能看出之前和之后的信息。less下

 

我們找到aa7后,就直接能發(fā)現(xiàn)代碼一直跑在CpuHighExample.java第19行上面。

 

當(dāng)然了,我們需要多jstack幾次,如果每次jstack出來(lái)都剛好在這段代碼左右,那么基本可以證明,是這段代碼導(dǎo)致CPU飆升了。

總結(jié)

CPU突然飆升這個(gè)問(wèn)題,我們很容易通過(guò)top -H和jstack找到對(duì)應(yīng)的代碼范圍,這無(wú)疑極大的縮小了我們的定位范圍。

本文轉(zhuǎn)載自微信公眾號(hào)「 解Bug之路」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 解Bug之路公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 解Bug之路
相關(guān)推薦

2023-03-06 08:41:32

CPU使用率排查

2020-11-02 09:25:33

CPUJava線程

2018-08-17 08:44:37

服務(wù)器內(nèi)存排查

2024-05-07 09:04:39

2023-12-26 11:39:50

CPU系統(tǒng)進(jìn)程

2019-11-06 09:36:16

服務(wù)器CPUTomcat

2022-08-08 09:02:23

CPUID日志

2020-09-29 07:59:22

CPU系統(tǒng)性能

2018-11-26 08:49:42

CPU排查負(fù)載

2024-05-24 10:15:36

2019-04-29 14:23:46

Java服務(wù)器CPU

2022-04-25 11:27:34

LinuxCPU

2010-08-18 09:52:25

Memcache

2022-09-26 23:36:33

Linux系統(tǒng)CPU

2019-01-21 11:17:13

CPU優(yōu)化定位

2019-07-16 06:43:18

LinuxCPU占用率

2024-06-28 11:54:20

2023-07-06 08:02:18

緩存架構(gòu)操作系統(tǒng)

2020-05-09 13:49:00

內(nèi)存空間垃圾
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 在线亚洲人成电影网站色www | 一级特黄视频 | 国产精品污污视频 | www.夜夜骑| 天天曰夜夜操 | 中文字幕亚洲区 | 国产区在线免费观看 | 精品国产乱码久久久久久丨区2区 | 国产91丝袜在线播放 | 亚洲高清在线 | av黄色网| 国产欧美日韩一区 | 午夜小电影| 久久久国产一区二区三区四区小说 | 亚洲先锋影音 | 精品国产乱码久久久久久丨区2区 | 国产91网址 | 亚洲国产精品视频 | 成人不卡在线 | 蜜桃视频成人 | 久久国产视频网站 | 老司机67194精品线观看 | 看羞羞视频免费 | 男人的天堂在线视频 | 在线a视频网站 | 日韩在线观看一区 | 米奇7777狠狠狠狠视频 | 欧美黑人又粗大 | 亚洲自拍偷拍免费视频 | 精品欧美一区免费观看α√ | www.99精品 | 欧美综合在线视频 | 欧美日韩国产一区 | 国产精品久久久久久久久久妞妞 | 色香婷婷 | 超碰人人91 | 国产一区二区三区亚洲 | 一区二区三区国产好 | 怡红院免费的全部视频 | 精品久久香蕉国产线看观看亚洲 | 日韩成人 |