前言
Linux下的top命令我相信大家都用過,自從我接觸Linux以來就一直用top查看進程的CPU和MEM排行榜。但是top命令的其他輸出結果我都沒有了解,這些指標都代表什么呢,什么情況下需要關注呢?以及top命令輸出結果的來源數據是什么呢,又是怎么一個計算原理呢?
演示環境
# uname -aLinux VM_1_11_centos 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
top命令
top命令是Linux下常用的性能分析工具,能夠實時(默認是3s刷新一次)的顯示系統的資源使用情況,以及各種進程的資源使用情況,類似于Windows的任務管理器。
top - 11:00:54 up 54 days, 23:35, 6 users, load average: 16.32, 18.75, 21.04Tasks: 209 total, 3 running, 205 sleeping, 0 stopped, 1 zombie%Cpu(s): 29.7 us, 18.9 sy, 0.0 ni, 49.3 id, 1.7 wa, 0.0 hi, 0.4 si, 0.0 stKiB Mem : 32781216 total, 1506220 free, 6525496 used, 24749500 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 25607592 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND root 20 0 15.6g 461676 4704 R 198.0 1.4 11:15.26 python root 20 0 9725596 240028 4672 R 113.0 0.7 7:48.49 python root 20 0 6878028 143196 4720 S 82.4 0.4 1:35.03 python
第一行數據相當于uptime命令輸出。11:00:54是當前時間,up 54 days,23:55 是系統已經運行的時間,6 users表示當前有6個用戶在登錄,load average:16.32,18.75,21.04分別表示系統一分鐘平均負載,5分鐘平均負載,15分鐘平均負載。
平均負載
平均負載表示的平均活躍進程數,包括正在running的進程數,準備running(就緒態)的進程數,和處于不可中斷睡眠狀態的進程數。如果平均負載數剛好等于CPU核數,那證明每個核都能得到很好的利用,如果平均負載數大于核數證明系統處于過載的狀態,通常認為是超過核數的70%認為是嚴重過載,需要關注。還需結合1分鐘平均負載,5分鐘平均負載,15分鐘平均負載看負載的趨勢,如果1分鐘負載比較高,5分鐘和15分鐘的平均負載都比較低,則說明是瞬間升高,需要觀察。如果三個值都很高則需要關注下是否某個進程在瘋狂消耗CPU或者有頻繁的IO操作,也有可能是系統運行的進程太多,頻繁的進程切換導致。比如說上面的演示環境是一臺8核的centos機器,證明系統是長期處于過載狀態在運行。
Tasks: 214 total, 4 running, 209 sleeping, 0 stopped, 1 zombie
第二行的Tasks信息展示的系統運行的整體進程數量和狀態信息。214 total 表示系統現在一共有214個用戶進程,4 running 表示4個進程正在處于running狀態,209 sleeping表示209個進程正處于sleeping狀態,0 stopped 表示 0 個進程正處于stopped狀態,1 zombie表示 有1個僵尸進程。
僵尸進程
子進程結束時父進程沒有調用wait()/waitpid()等待子進程結束,那么就會產生僵尸進程。原因是子進程結束時并沒有真正退出,而是留下一個僵尸進程的數據結構在系統進程表中,等待父進程清理,如果父進程已經退出則會由init進程接替父進程進行處理(收尸)。由此可見,如果父進程不作為并且又不退出,就會有大量的僵尸進程,每個僵尸進程會占用進程表的一個位置(slot),如果僵尸進程太多會導致系統無法創建新的進程,因為進程表的容量是有限的。所以當zombie這個指標太大時需要引起我們的注意。下面的進程詳細信息中的S列就代表進程的運行狀態,Z表示該進程是僵尸進程。
新聞熱點
疑難解答