原创|面试官:线上服务器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占用情況:
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。
通過以上命令,我們可以看到,進程ID為1893的Java進程的CPU占用率達到了181%,基本可以定位到是我們的Java應用導致整個服務器的CPU占用率飆升。
定位線程
我們知道,Java是單進程多線程的,那么,我們接下來看看PID=1893的這個Java進程中的各個線程的CPU使用情況,同樣是用top命令:
通過top -Hp 1893命令,我們可以發現,當前1893這個進程中,ID為4519的線程占用CPU最高。
定位代碼
通過top命令,我們目前已經定位到導致CPU使用率較高的具體線程, 那么我么接下來就定位下到底是哪一行代碼存在問題。
首先,我們需要把4519這個線程轉成16進制:
接下來,通過jstack命令,查看棧信息:
通過以上代碼,我們可以清楚的看到,BeanValidator.java的第30行是有可能存在問題的。
3
問題解決
接下來就是通過查看代碼來解決問題了,我們發現,我們自定義了一個BeanValidator,封裝了Hibernate的Validator,然后在validate方法中,通過Validation.buildDefaultValidatorFactory().getValidator()初始化一個Validator實例,通過分析發現這個實例化的過程比較耗時。
我們重構了一下代碼,把Validator實例的初始化提到方法外,在類初始化的時候創建一次就解決了問題。
4
總結
以上,展示了一次比較完成的線上問題定位過程。主要用到的命令有:top 、printf 和 jstack
另外,線上問題排查還可以使用Alibaba開源的工具Arthas進行排查,以上問題,可以使用一下命令定位:
以上,本文介紹了如何排查線上服務器CPU使用率過高的問題,如果大家感興趣,后面可以再介紹一些關于LOAD飆高、頻繁GC等問題的排查手段。
關于本次問題排查,你有什么想說的呢?歡迎交流。
極客時間最近出了一個消息隊列的課程,作者是來自京東的架構師,我看了下內容感覺還不錯,目前還在更新中,感興趣的可以訂閱看看,原價99,限時優惠68元,通過以下二維碼購買,可以找我領取24元返現(極客時間給我的推薦獎勵是24元),添加好友Hollis66私信即可。更多極客時間優惠課程可見:福利貼—極客時間優惠專用
- MORE | 更多精彩文章 -
8種你可能正在寫錯的SQL用法
一篇文章帶你登頂 MacBook高效工作環境配置
2019 Java發展趨勢報告:Java老矣,Java正年輕
如何寫一個清晰明了的Bug
如果你喜歡本文,
請長按二維碼,關注?Hollis.
轉發至朋友圈,是對我最大的支持。
好文章,我在看??
總結
以上是生活随笔為你收集整理的原创|面试官:线上服务器CPU占用率高如何排查定位问题?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Alibaba Sentinel 限流与
- 下一篇: hdu 1050 Moving Ta