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

Java程序占用 CPU 過高怎么排查

商務辦公
這個問題可以說是 Java 面試的高頻面試題了,有很多面試官都喜歡問這個問題,問題可能是下面這樣的。

[[349805]]

這個問題可以說是 Java 面試的高頻面試題了,有很多面試官都喜歡問這個問題,問題可能是下面這樣的。

線上一臺服務器 CPU 使用率100% 了,如果你碰到這樣的情況,如何排查并找到問題原因?

這就是一個套路題,所謂套路題就是有標準的套路解法的,掌握了套路,不僅能解決面試官,還能解決問題。不然真的就掉進套路里了。

當我們真碰到這個問題的時候應該怎么排查呢?

模擬一個高 CPU 場景

先用一段程序創(chuàng)建幾個線程,將其中一個線程設置成高 CPU 使用率的。

  1. public static void main(String[] args)  { 
  2.   for (int i = 0; i < 10; i++) { 
  3.     Thread thread = new Thread(() -> { 
  4.       System.out.println(Thread.currentThread().getName()); 
  5.       try { 
  6.         Thread.sleep(30 * 60 * 1000); 
  7.       }catch (Exception e){ 
  8.         e.printStackTrace(); 
  9.       } 
  10.     }); 
  11.     thread.setName("thread-" + i); 
  12.     thread.start(); 
  13.   } 
  14.  
  15.   Thread highCpuThread = new Thread(() -> { 
  16.     int i = 0; 
  17.     while (true) { 
  18.       i++; 
  19.     } 
  20.   }); 
  21.   highCpuThread.setName("HighCpu"); 
  22.   highCpuThread.start(); 

運行這段程序后,前面 10 個線程都處于休眠狀態(tài),只有最后一個線程會持續(xù)的占用 CPU 。

運行這段程序,然后就可以開始一些列的操作來發(fā)現(xiàn)問題原因了。

排查步驟

第一步,使用 top 找到占用 CPU 最高的 Java 進程

在真實環(huán)境中,首先要確認是不是 Java 程序造成的,如果有系統(tǒng)監(jiān)控工具,可能會直接在預警信息里告訴你是有哪個進程造成的,但也有可能不知道,需要我們手動排查。

如果是在面試場景中,這個問題可能不需要確認,畢竟 Java 面試,面試官可能直接就告訴你是 Java 占用的 CPU 過高。

這一步也非常簡單,就是一個 top命令而已,基本上所有同學都用過這個命令吧。

使用 top命令發(fā)現(xiàn)占用 CPU 99.7% 的線程是 Java 進程,進程 PID 為 13731。

第二步,用 top -Hp 命令查看占用 CPU 最高的線程

上一步用 top命令找到了那個 Java 進程。那一個進程中有那么多線程,不可能所有線程都一直占著 CPU 不放,這一步要做的就是揪出這個罪魁禍首,當然有可能不止一個。

執(zhí)行top -Hp pid命令,pid 就是前面的 Java 進程,我這個例子中就是 13731 ,完整命令為:

top -Hp 13731,執(zhí)行之后的效果如下

可以看到占用 CPU 最高的那個線程 PID 為 13756。

然后將 13756轉換為 16 進制的,后面會用到,可以用在線進制轉換的網(wǎng)站直接轉換,轉換結果為 0x35bc

第三步,保存線程棧信息

當前 Java 程序的所有線程信息都可以通過 jstack命令查看,我們用jstack命令將第一步找到的 Java 進程的線程棧保存下來。

  1. jstack 13731 > thread_stack.log 

第四步,在線程棧中查找最貴禍首的線程

第二步已經(jīng)找到了這個罪魁禍首的線程 PID,并把它轉換成了 16 進制的,第三步保存下來的線程棧中有所有線程的 PID 16 進制信息,我們在線程棧中查找這個16進制的線程 id (0x35bc)。

怎么樣,現(xiàn)在一目了然了,線程名稱、線程狀態(tài)、以及哪行代碼消耗了最多的 CPU 都很清楚了。

本文轉載自微信公眾號「古時的風箏」,可以通過以下二維碼關注。轉載本文請聯(lián)系古時的風箏公眾號。

 

責任編輯:武曉燕 來源: 古時的風箏
相關推薦

2019-04-29 14:23:46

Java服務器CPU

2017-02-16 19:39:29

Windows 10System進程CPU

2017-02-07 19:02:47

Windows 7WindowsCPU

2018-11-26 08:49:42

CPU排查負載

2020-10-12 14:18:15

CPU技巧代碼

2021-02-26 13:35:46

JavaCPU內(nèi)存

2010-08-18 09:52:25

Memcache

2022-06-27 11:20:13

工具內(nèi)存GO

2020-12-20 10:37:06

Windows10操作系統(tǒng)CPU

2019-07-16 06:43:18

LinuxCPU占用率

2022-03-11 07:30:04

SQLMySQLCPU

2021-05-12 06:57:03

Windows 10Windows操作系統(tǒng)

2022-08-04 13:58:28

Windows 11微軟CPU

2019-07-24 11:52:11

CPU服務器面試官

2021-11-19 11:50:48

MyBatisforeachJava

2023-03-08 10:22:25

NVIDIAWindows

2023-03-05 16:40:07

linux進程內(nèi)存

2021-05-12 21:10:22

Windows10操作系統(tǒng)微軟

2023-08-23 07:48:35

2018-08-13 10:45:36

Windows 10WindowsCPU處理器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 韩国成人在线视频 | 国产精品免费一区二区三区四区 | av大片 | 91精品国产综合久久久久蜜臀 | 欧美精品一区三区 | 亚洲性人人天天夜夜摸 | 黄色片在线免费看 | 欧美亚洲国产一区二区三区 | 99视频入口 | 日韩在线欧美 | 午夜精品 | 精品粉嫩aⅴ一区二区三区四区 | 婷婷中文字幕 | 欧美伊人久久久久久久久影院 | 99re热精品视频 | 免费99视频 | 国产精品高| 欧美一级在线观看 | 综合久 | 久草视频在线看 | 亚洲精品一区二三区不卡 | 成人国产精品色哟哟 | 亚洲一区中文字幕在线观看 | 天啪| 国产www. | 天堂久久av | 在线免费观看一区二区 | 亚洲理论在线观看电影 | 久久婷婷香蕉热狠狠综合 | 亚洲精品在线免费播放 | 欧美精品一区二区三区在线 | 亚洲欧洲精品在线 | 国产丝袜av | 在线观看成人免费视频 | 国产亚洲精品精品国产亚洲综合 | 午夜精品一区二区三区在线视频 | 国产精品久久久久久久久污网站 | 99re在线视频 | 亚洲精品久久久久久国产精华液 | 可以免费观看的av | 欧美精品一区二区三区在线 |