歡迎光臨
每天分享高質量文章

程式員不可不知的Linux性能工具

作者:張豐哲

來自:https://www.jianshu.com/p/e4cd53186202

在實際開發中,有時候會收到一些服務的監控報警,比如CPU飆高,記憶體飆高等,這個時候,我們會登錄到服務器上進行排查。本篇博客將涵蓋這方面的知識:Linux性能工具。

一次線上問題排查模擬

背景服務在平穩運行一段時間後,CPU突然飆高。通過top命令,可以確認下,到底是哪個行程導致CPU飆高了(也許是誤報呢?)。

top

從上面可以看到圖中PID是2816的行程,CPU使用率非常高。使用top -Hp 2816來對該行程下的執行緒進行觀察。圖中可以發現,2825這個執行緒CPU非常高。

查看行程下的執行緒信息

這裡利用Python非常方便的把十進制的執行緒ID轉化成了16進制。

進制轉換

為什麼要這麼做呢?因為在接下來的執行緒DUMP檔案中使用的就是16進制的NID。

執行緒DUMP檔案

在實際中,我們應該利用jstack pid多DUMP幾次,因為執行緒存在狀態轉換,因此多次DUMP有利於抓取到執行緒更多的信息。圖中,你可以觀察到,一個執行緒得到了鎖,在運行,遲遲沒有釋放,而另一個執行緒一直在等待這個鎖。至此,就可以到去查看代碼去分析為什麼鎖遲遲不釋放的原因了。

執行緒狀態轉換

性能監測工具top詳解

上文的案例中,就使用到了top,而在實際中,top的信息量是很大的,這裡詳細分析下。

top

第一行:涉及到2個時間,一個是系統時間,一個是機器運行的時間。【我們應該重點關註的是機器運行的時間,Why? 有時候,重啟機器能帶來很多問題,你懂的!】

多少用戶登錄了系統?【通過who/w/history可以查到更多信息】

3個load值是什麼含義?分別代表的是1MIN,5MIN,15MIN機器的負載情況,如何確定負載的大小呢?需要和CPU的核數相結合來看,比如該機器是4核CPU,那麼如果load值超過了4,就意味著負載很大了!【在top下按下1可以觀察出CPU的個數】,關於系統負載,具體可以閱讀前面文章Linux中load average意義(請戳我)

第二行:主要是總共有多少個任務,重點應該關註的是僵屍狀態的任務數。

第三行:主要是CPU的一些信息。

US/SY:說的就是用戶行程和系統行程使用CPU的占比。

NI:即NICE,表示被調整過執行緒優先級的行程占比,這個比例正常不應該很大。

ID:表示空閑;WA表示資源等待的時間,比如在瞬時大流量下,服務打了很多日誌的話,那麼這個值就會飆高,因為這會很消耗資源的。

HI:硬中斷,一般就是外設引起的,如果HI飆高的話,那麼意味著外設在硬體層面出現了問題。SI表示軟中斷。

ST:即steel,如果該主機是虛擬的話會有這個ST信息,也即是該虛擬機從宿主機獲取CPU的時間片的百分占比。

用戶空間和系統空間

第四、五行:這裡主要說2個概念性的東西:buffer 和 cache。

buffer主要是什麼呢?應該是待處理的資料,主要是處理2個系統之間速度不匹配的問題。而cache,一般應該是結果資料的快取,比如從DB加載一些信息供查詢用。

SWAP分割槽,就是想利用硬碟的做一部分快取,如果SWAP交換非常頻繁的話,就是說記憶體不夠用!

串列說明:PID  行程ID、USER 用戶、PR 優先級、VIRT 虛擬記憶體、RES 駐留記憶體、SHR 共享記憶體

這裡需要指出的是,RES表示的是該行程實際占用的記憶體,而並不是申請的記憶體大小。也就是說當前行程所占用的記憶體物理大小是   RES-SHR。


●編號487,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

 

Python編程

更多推薦18個技術類微信公眾號

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂