解密“top”命令
當對服務器的性能好奇時,我第一個想到的是"top"命令。top不是最好的,它不是一個長期的快照,但是它提供了服務器的一個不錯的時間點快照,并且試著提供了告訴"現在在發生什么?"。不幸地,如果你沒有深入了解不同顯示域的意義,top的輸出很容易被誤解。
我不會完整解讀top命令的man page,當你和時間和意愿時,它一直在那等著你。我想要做的是指出一些我如何得到系統的快速概況的幾個要點,并希望得到我接下來該怎么做的指示。top是我在故障排除時的第一站,但這很少會是我唯一的一站。
top命令我第一個看的是平均負載(load average),它在右上角的屏幕上。平均負載的計算是基于統計搜集到的數量,但是通常可以認為是CPU被請求工作的數量。如果你的機器有一個單核CPU,那么平均負載是1就意味著機器滿載的,并且有足夠的能力在采樣時間內完成任務。同樣地,如果平均負載是2,那對單核的CPU是超載的,并需要2個可用內核才能在同樣的采樣時間內完成的要求的任務。隨著8、16、32核的發售,我會在判斷平均負載的時候就要注意一下。比如我需要去檢測時,我會在top里按了數字"1",這會列出所有CPU核列表,這樣我就可以得到一個快速計數用于比較負載。
我檢查的第二項是上面列出來的內容的第9列,標記著"%CPU"那個。對這一列的解釋是很模糊的:
任務所分享的上次屏幕刷新后的CPU運行時間,以全部的CPU時間百分比表示。在一個真正的SMP(多處理器)環境中,如果'Irix mode'是關閉的,top會在'Solaris mode'下運行,這里一個任務的cpu使用率將除以全部的CPU數量。你可以用'I'(大寫字母I)這個交互命令觸發Irix或Solaris模式。 |
一點也不清楚,是么?這里要記住的主要意思是,如果單個進程由于某個原因或者其他因素占用率升高,那么他很有可能會以%CPU很高的數字顯示在top的第一行。
我下一個注意到的區域是"Cpu(s):"這一行,在頭部信息的中間。特別地,我對%us、sy%、%id、和%wa感興趣,它們分別是用戶進程、系統進程、空閑時間和CPU用于等待I/O流執行的時間比例。這個百分比應該接近于0,高于5%時需要密切關注。
最后,我想要看看系統up時間,這顯示在左上角。如果我對一臺服務器有疑問,并且這臺服務器最近重啟過,這里可能會發現一些什么,或許是一個守護進程沒有啟動。
這些檢查只需要幾秒。如果我只是觀察,我可能讓top運行幾分鐘并觀察進程、CPU和負載,但是通常地我很快地進入和退出top。top是給你一個系統健康概況的那些奇妙系統管理員工具之一,并允許你快速診斷潛在的問題。