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

怎么排查CPU飆升

商務辦公
線上有些系統,本來跑的好好的,突然有一天就會出現報警,CPU使用率飆升,然后重啟之后就好了。例如,多線程操作一個線程不安全的list往往就會出現這種現象。

 [[345730]]

怎么排查CPU飆升

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

代碼準備

這次,筆者準備了一個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.                     // 構造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.                         // 構造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.     } 

案例運行

這個案例一運行,就聽見筆者的電腦風扇起飛了,呼呼作響。直接top一下

 

果然是java進程,占用最高,CPU 100%了(占用了一個核),而其PID是2717,正是我們跑的例子。那么下一步,我們就需要定位到底是那一個線程在耗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,同時線程名是thread1。

繼續jstack

我們知道jstack可以dump出jvm所有線程運行的快照,然后我們就可以通過剛才獲取的PID去定位到jstack那個進程。

  1. // 注意,這邊用top出來的進程號2717,而不是top -H出來的2727 
  2. 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找到對應的代碼范圍,這無疑極大的縮小了我們的定位范圍。

本文轉載自微信公眾號「 解Bug之路」,可以通過以下二維碼關注。轉載本文請聯系 解Bug之路公眾號。

 

責任編輯:武曉燕 來源: 解Bug之路
相關推薦

2023-03-06 08:41:32

CPU使用率排查

2020-11-02 09:25:33

CPUJava線程

2018-08-17 08:44:37

服務器內存排查

2023-12-26 11:39:50

CPU系統進程

2024-05-07 09:04:39

2022-08-08 09:02:23

CPUID日志

2019-11-06 09:36:16

服務器CPUTomcat

2020-09-29 07:59:22

CPU系統性能

2018-11-26 08:49:42

CPU排查負載

2024-05-24 10:15:36

2019-04-29 14:23:46

Java服務器CPU

2010-08-18 09:52:25

Memcache

2022-04-25 11:27:34

LinuxCPU

2022-09-26 23:36:33

Linux系統CPU

2024-06-28 11:54:20

2019-07-16 06:43:18

LinuxCPU占用率

2019-01-21 11:17:13

CPU優化定位

2023-07-06 08:02:18

緩存架構操作系統

2020-05-09 13:49:00

內存空間垃圾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品区一区二区三 | 99爱在线观看 | 伊人电影院av | 久久久久一区二区三区四区 | 黄网站免费在线 | 91九色在线观看 | 欧美做暖暖视频 | 日本a v在线播放 | 日韩欧美国产一区二区三区 | 亚洲国产一区二区视频 | 国内自拍真实伦在线观看 | 精品久久一区 | 亚洲综合大片69999 | 日韩欧美在线一区 | 精品日韩一区二区 | 亚洲欧美日韩在线不卡 | 国产av毛片 | 中文字幕一区二区三区精彩视频 | 欧美精品日韩精品国产精品 | 欧美精品在线看 | 亚洲国产精品久久久久久 | 国产精品一区二区三区在线 | 国产精品毛片av一区 | 国产激情一区二区三区 | 国产一区二区三区 | 日本不卡一区二区三区 | 日韩成人免费视频 | 久久久久久久一区二区三区 | 久久久久久国产精品 | 国产一区二区欧美 | av免费在线观看网站 | 美女视频一区二区三区 | 成人国产精品久久久 | 成人福利电影 | 毛片久久久 | 国产精品毛片在线 | 国产成人一区二区三区 | 国产精品高潮呻吟久久av黑人 | 午夜影院在线观看 | 情侣酒店偷拍一区二区在线播放 | 久久精品中文 |