在實際開發中,有時候會收到一些服務的監控報警,比如cpu飆高,記憶體飆高等,這個時候,我們會登入到伺服器上進行排查。本篇部落格將涵蓋這方面的知識:linux效能工具。
背景:服務在平穩執行一段時間後,cpu突然飆高。通過top命令,可以確認下,到底是哪個程序導致cpu飆高了(也許是誤報呢?)。可以看到圖中pid是2816的程序,cpu使用率非常高。
使用top -hp 2816來對程序下的執行緒進行觀察。圖中可以發現,2825這個執行緒cpu非常高。這裡利用python非常方便的把十進位制的執行緒id轉化成了16進製制,為什麼要這麼做呢?因為在接下來的執行緒dump檔案中使用的就是16進製制的nid。
在實際中,我們應該利用jstack pid多dump幾次,因為執行緒存在狀態轉換,因此多次dump有利於抓取到執行緒更多的資訊。圖中,你可以觀察到,乙個執行緒得到了鎖,在執行,遲遲沒有釋放,而另乙個執行緒一直在等待這個鎖。至此,就可以到去檢視**去分析為什麼鎖遲遲不釋放的原因了。
上文的案例中,就使用到了top,而在實際中,top的資訊量是很大的,這裡詳細分析下。第一行:涉及到2個時間,乙個是系統時間,乙個是機器執行的時間。【我們應該重點關注的是機器執行的時間,why? 有時候,重啟機器能帶來很多問題,***!】
多少使用者登入了系統?【通過who/w/history可以查到更多資訊】
3個load值是什麼含義?
分別代表的是1min,5min,15min機器的負載情況,如何確定負載的大小呢?需要和cpu的核數相結合來看,比如該機器是4核cpu,那麼如果load值超過了4,就意味著負載很大了!【在top下按下1可以觀察出cpu的個數】
上述資訊,其實也可以通過uptime命令來獲取。
第二行:
主要是總共有多少個任務,重點應該關注的是殭屍狀態的任務數。
第三行:
主要是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。
linux效能監控分析命令top
top命令 top命令是linux下常用的效能分析工具,能夠實時監控系統的執行狀態,主要顯示系統中各個程序的資源使用情況,並根據cpu及記憶體等進行排序。前五行是總體的統計資訊 第一行 系統當前時間,系統執行時間 up xx days,hh mm 當前登入使用者數,系統平均負載 3個數值分別統計最近...
linux 效能監控分析以及調優 top
1.top 說明 top命令能夠實時監控系統的執行狀態,並且可以按照cpu 記憶體和執行時間進行排序,同時top命令還可以通過互動式命令進行設定顯示,通過top命令可以檢視即時活躍的進行。2.top命令的用法 1 命令列啟動引數 用法 top hv bcisshm d delay n iterati...
效能測試 top命令
1 top命令 相當於windows下的資源管理器,能夠動態實時的顯示系統中程序的資源占用情況。2 在linux終端上輸入top命令出現的結果及其表示的含義如下圖 順便說一下uptime命令 3 以上是預設的顯示內容,可以通過快捷鍵來更改顯示的內容 1 按f鍵 會顯示如下列表 選a z鍵就可以顯示或...