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

面試官:線上服務器CPU占用率高如何排查定位問題?

系統 Linux
本文我們就來簡單介紹一下,如果線上服務器發生CPU占用率過高的問題時,應該如何排查并定位問題。

國外開發者平臺 HankerRank 發布的 2018 年開發者技能調查報告中有一項關于"雇主最看重哪些核心能力"的調查,結果顯示如下: 

 

 

 

排名前幾的比較受重視的能力分別為:解決問題、編程語言熟練程度、Debug、系統設計和性能優化。

解決問題的能力以超高比例排名第一,這也是為什么很多面試過程中,面試官都喜歡問如下問題:

  1. 你這個項目遇到的最大挑戰是什么?如何解決的?
  2. 如果線上發生了報警你回如何排查呢?
  3. 你有解決過什么線上問題嗎?
  4. 能列舉幾個你知道的排查Linux服務器線上問題的命令嗎?

這些,都是比較常見的問題,還有一些比較具體的問題也是建議很多開發者都需要掌握的,如:

  1. 線上服務器Load飆高如何排查?
  2. 線上服務器CPU占用率高如何排查?
  3. 線上服務器頻繁發生Full GC如何排查?
  4. 線上服務器發生死鎖如何排查?

這些問題的回答,一方面考察了面試者是否具有很強的實戰經驗,另外一方面也能體現出其解決問題的能力。

毋庸置疑,作為開發人員來說,定位并解決問題的能力是至關重要的。因為一旦線上發生了問題,如CPU占用率高,如果不及時解決,很容易導致網站響應慢、服務器宕機等問題。

那么,書歸正傳,本文我們就來簡單介紹一下,如果線上服務器發生CPU占用率過高的問題時,應該如何排查并定位問題。

1、問題發現

本文整理自一個真實的案例,是樓主負責的業務,在一次大促之前的壓測時發現了這個問題。

在每次大促之前,我們的測試人員都會對網站進行壓力測試,這個時候會查看服務的cpu、內存、load、rt、qps等指標。

在一次壓測過程中,測試人員發現我們的某一個接口,在qps上升到500以后,CPU使用率急劇升高。

CPU利用率,又稱CPU使用率。顧名思義,CPU利用率是來描述CPU的使用情況的,表明了一段時間內CPU被占用的情況。使用率越高,說明你的機器在這個時間上運行了很多程序,反之較少。

2、問題定位

遇到這種問題,首先是登錄到服務器,看一下具體情況。

定位進程

登錄服務器,執行top命令,查看CPU占用情況:

 

  1. $top 
  2.    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
  3.   1893 admin     20   0 7127m 2.6g  38m S 181.7 32.6  10:20.26 java 

top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。

通過以上命令,我們可以看到,進程ID為1893的Java進程的CPU占用率達到了181%,基本可以定位到是我們的Java應用導致整個服務器的CPU占用率飆升。

定位線程

我們知道,Java是單進程多線程的,那么,我們接下來看看PID=1893的這個Java進程中的各個線程的CPU使用情況,同樣是用top命令:

 

  1. $top -Hp 1893 
  2.    PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 
  3.   4519 admin     20   0 7127m 2.6g  38m R 18.6 32.6   0:40.11 java 

通過top -Hp 1893命令,我們可以發現,當前1893這個進程中,ID為4519的線程占用CPU最高。

定位代碼

通過top命令,我們目前已經定位到導致CPU使用率較高的具體線程, 那么我么接下來就定位下到底是哪一行代碼存在問題。

首先,我們需要把4519這個線程轉成16進制:

 

  1. $printf %x 4519 
  2. 11a7 

接下來,通過jstack命令,查看棧信息:

  1. $sudo -u admin  jstack 1893 |grep -A 200 11a7 
  2. "HSFBizProcessor-DEFAULT-8-thread-5" #500 daemon prio=10 os_prio=0 tid=0x00007f632314a800 nid=0x11a2 runnable [0x000000005442a000] 
  3.    java.lang.Thread.State: RUNNABLE 
  4.   at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:684) 
  5.   at sun.misc.URLClassPath.findResource(URLClassPath.java:188) 
  6.   at java.net.URLClassLoader$2.run(URLClassLoader.java:569) 
  7.   at java.net.URLClassLoader$2.run(URLClassLoader.java:567) 
  8.   at java.security.AccessController.doPrivileged(Native Method) 
  9.   at java.net.URLClassLoader.findResource(URLClassLoader.java:566) 
  10.   at java.lang.ClassLoader.getResource(ClassLoader.java:1093) 
  11.   at java.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232) 
  12.   at org.hibernate.validator.internal.xml.ValidationXmlParser.getInputStreamForPath(ValidationXmlParser.java:248) 
  13.   at org.hibernate.validator.internal.xml.ValidationXmlParser.getValidationConfig(ValidationXmlParser.java:191) 
  14.   at org.hibernate.validator.internal.xml.ValidationXmlParser.parseValidationXml(ValidationXmlParser.java:65) 
  15.   at org.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:287) 
  16.   at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:174) 
  17.   at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111) 
  18.   at com.test.common.util.BeanValidator.validate(BeanValidator.java:30) 

通過以上代碼,我們可以清楚的看到,BeanValidator.java的第30行是有可能存在問題的。

3、問題解決

接下來就是通過查看代碼來解決問題了,我們發現,我們自定義了一個BeanValidator,封裝了Hibernate的Validator,然后在validate方法中,通過Validation.buildDefaultValidatorFactory().getValidator()初始化一個Validator實例,通過分析發現這個實例化的過程比較耗時。

我們重構了一下代碼,把Validator實例的初始化提到方法外,在類初始化的時候創建一次就解決了問題。

4、總結

以上,展示了一次比較完成的線上問題定位過程。主要用到的命令有:top 、printf 和 jstack

另外,線上問題排查還可以使用Alibaba開源的工具Arthas進行排查,以上問題,可以使用一下命令定位:

  1. thread -n 3 //查看cpu占比前三的線程 

以上,本文介紹了如何排查線上服務器CPU使用率過高的問題,如果大家感興趣,后面可以再介紹一些關于LOAD飆高、頻繁GC等問題的排查手段。 

 

責任編輯:龐桂玉 來源: Hollis
相關推薦

2019-07-16 06:43:18

LinuxCPU占用率

2024-10-21 00:00:01

Linux服務器CPU

2023-02-16 08:10:40

死鎖線程

2018-08-10 15:00:42

服務器內存排查

2009-08-13 17:53:59

控制CPU占用率

2016-09-21 12:26:47

Windows 10CPU禁用

2022-10-10 12:31:37

服務器性能

2021-02-26 13:35:46

JavaCPU內存

2019-09-17 13:00:54

Windows 10微軟CPU

2023-03-06 08:41:32

CPU使用率排查

2010-02-24 08:09:09

Windows 7內存占用

2019-07-31 07:26:16

Linux服務器CPU

2022-10-10 09:10:07

命令磁盤排查

2019-04-29 14:23:46

Java服務器CPU

2017-08-19 23:21:14

線上CPU定位

2024-09-18 09:02:14

單核服務器線程切換

2024-02-28 10:14:47

Redis數據硬盤

2019-03-07 09:25:59

LinuxCPU交換分區

2024-07-23 08:21:19

2020-12-20 10:37:06

Windows10操作系統CPU
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠夜夜 | 久久久网 | 91porn成人精品 | 在线中文字幕日韩 | 一区二区成人 | 欧美激情一区二区三级高清视频 | 欧美国产中文字幕 | 天天拍天天操 | 亚洲最新在线 | 久久在看| 精品视频一区二区三区 | 国产乱码精品一区二区三区五月婷 | 久久久夜夜夜 | 成人毛片一区二区三区 | 欧美日日 | 亚洲精品久久区二区三区蜜桃臀 | 亚洲444kkkk在线观看最新 | 久久久蜜桃 | 欧美日韩亚洲国产 | 成人三区四区 | 麻豆av网| 91看片视频 | 国内精品视频一区二区三区 | 久久精品亚洲一区二区三区浴池 | 羞羞视频在线网站观看 | jlzzjlzz欧美大全| 免费黄色片在线观看 | 国产视频一区在线观看 | 九九九精品视频 | 成av在线 | 亚洲综合视频 | 俺去俺来也www色官网cms | 免费观看一级特黄欧美大片 | 国产精品久久久久久久久久久久午夜片 | 亚洲成av人片在线观看无码 | 国产伦一区二区三区久久 | 99久久精品视频免费 | 免费黄色片视频 | 久久久国产网站 | 久久亚洲一区 | h网站在线观看 |