top命令幾乎是每個程式員都會用到的Linux命令,這個命令用來查看Linux系統的綜合性能,比如CPU使用情況,記憶體使用情況,這個命令能幫助我快速定位程式的性能問題,
雖然這個命令很重要,但是之前對于這個命令的使用幾乎僅限于查看下哪個行程使用的CPU最高,哪個行程占用的記憶體最高,對于輸出的各個引數的含義也是一知半解,更不用說top的一些高級用法了,
本篇博客就來具體分析下top的詳細使用方法,
top輸出引數的含義
在Linux終端輸入top,一般會有如下輸出,
top - 15:34:12 up 127 days, 10:23, 2 users, load average: 0.04, 0.03, 0.00
Tasks: 291 total, 1 running, 290 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1792312k total, 288300k used, 1504012k free, 10384k buffers
Swap: 6291452k total, 5380k used, 6286072k free, 14128k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
372007 root 20 0 15160 1336 888 R 0.3 0.1 0:00.33 top
1 root 20 0 19356 236 88 S 0.0 0.0 0:16.06 init
... 下面省略...
下面就對這些輸出資訊做下詳細的說明
系統運行時間和平均負載
top輸出的第一行表示系統的運行時間和平均負載
top - 15:34:12 up 127 days, 10:23, 2 users, load average: 0.04, 0.03, 0.00
-
15:34:12: 表示系統的當前時間是下午15點34分12秒; -
up 127 days, 10:23:表示這個Linux系統已經啟動127天多; -
2 users:表示當前有兩個用戶登陸系統,可以用who命令查看具體是誰登陸了; -
load average: 0.04, 0.03, 0.00:最近1、5和15分鐘內的平均負載?
1. load average的含義
這里我們對這個laod average指標做下詳細說明,
laod average這個指標的含義:在特定時間間隔內運行佇列中(在CPU上運行或者等待運行多少行程)的平均進
程數(狀態是Runnable和running的執行緒個數的和),上面這個解釋可能還是比較難理解,我們拿個實際的列子說明下,比如現在top命令有以下輸出:
load average: 20.14, 22.03, 15.00
20.14 表示從當前時間到過去的一分鐘內大概有 20.14個行程(執行緒)在等待CPU資源
22.03 表示從當前時間到過去的五分鐘內大概有 22.03個行程(執行緒)在等待CPU資源
15.00 表示從當前時間到過去的十五分鐘內大概有 15.00個行程(執行緒)在等待CPU資源
為了更好地理解這個負載的含義,下面列了一個交通流量的列子,
單核CPU可以想象成單車道

比如每個圓圈都是小汽車,第一種是滿負荷但CPU時間片不用排隊等待正好夠用,第二種是%50空閑,第三個是超負荷50%,后面的就有佇列等待了,
單核CPU,負載數值在0.00-1.00之間正常,
- 0.00-1.00之間的數字表示此時路況非常良好,沒有擁堵,車輛可以毫無阻礙地通過,
- 1.00表示道路還算正常,但有可能會惡化并造成擁堵,此時系統已經沒有多余的資源了,管理員需要進行優化,
- 1.00以上表示路況不太好了,如果到達2.00表示有橋上車輛一倍數目的車輛正在等待,這種情況你必須進行檢查了,
多核CPU可以想象成多車道

多核CPU的話,負載數值/CPU核數 在0.00-1.00之間表示正常,
現實生產中,不會讓負載數值/CPU核數任意接近1的,一般當這個值達到0.8或者0.9時就需要分析分析原因了,當然這個也沒有具體的定論,都是一家之言,
2. load average和CPU利用率的區別(這兩個概念很重要,希望大家仔細看看)
先直接參考下這篇文章中的截圖



上面的列子對CPU使用個CPU做了比較好的解釋,我自己也想了個列子,可能更加形象貼切,
其實,可以將CPU比喻成公司的廁所,比如說你所在的樓層有一個衛生間,每個衛生間有4個坑位(4核CPU),一般早上的時候資源會比較緊張,在某個時間點,你做了一個統計,你發現在過去的1分鐘,5分鐘和15分鐘內分別有6個人,8個人,8個人正在”使用“廁所(這里的人數包括等待上廁所和正在上廁所的人數),那兒此時公司廁所的負載就是6.00,8.00和8.00,通過上面的介紹我們發現此時公司廁所是過載的,(這個就是CPU負載的概念)
那么CPU使用又是什么意思呢?
還是以剛剛的廁所為列子,以現在的時間點到過去的15分鐘內,你發現有3個同事用了其中一個坑位,時候你采訪了下這個三個同事:在他們使用廁所的程序中多長時間是真的在上廁所?采訪結果是:第一個同事2分鐘上測驗+3分鐘玩手機,第二個同事1分鐘上廁所+3分鐘胡思亂想,第三個同事3分鐘上廁所+3分鐘玩手機,
那么這段時間內這個坑位的利用率就是(2+1+3)/15 = 40%
3. CPU負載和CPU使用率對我們的知道意義
- 高CPU負載 低CPU使用率:可能系統中較多的檔案IO和網路IO操作,
- 高CPU負載 高CPU使用率:CPU資源不足
- 低CPU負載 低CPU使用率:系統CPU資源良好,道路非常順暢;
- 低CPU負載 高CPU使用率:這種情況一般都是程式的問題,比如程式中代碼進入死回圈,有很多自旋操作等,CPU使用率一直過高對CPU傷害比較大,
上面只是列了一些比較常見的情況,具體問題還得具體分析,
任務資訊
Tasks: 291 total, 1 running, 290 sleeping, 0 stopped, 0 zombie
Tasks — 任務(行程),系統現在共有 291 個行程,其中處于運行中的有1個,290個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵尸)的有0個,
按 t 可以關閉顯示這個任務資訊,再按下 t 可以開啟這個任務資訊
CPU狀態
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st
- us 列顯示了用戶模式下所花費 CPU 時間的百分比,us的值比較高時,說明用戶行程消耗的 CPU 時間多,但是如果長期大于50%,需要考慮優化用戶的程式,
- sy 列顯示了內核行程所花費的 CPU 時間的百分比,這里us + sy的參考值為80%,如果us+sy 大于 80%說明可能存在CPU不足,
- ni 列顯示了用戶行程空間內改變過優先級的行程占用CPU百分比,
- id 列顯示了 CPU 處在空閑狀態的時間百分比,
- wa 列顯示了IO等待所占用的CPU時間的百分比,這里 wa 的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁盤大量隨機訪問造成的,也可能磁盤或者磁盤訪問控制器的帶寬瓶頸造成的(主要是塊操作), 這個wa和vmstat中的wa是相同含義,
- hi 硬體中斷占用CPU
- si 軟體中斷占用CPU
- st 丟失時間占用CPU
在后臺開發中需要關注us,sy,id,wa等常用指標,
按數字 1,可以查看CPU的核數和每個CPU的使用情況,
記憶體使用情況
Mem: 1792312k total, 288300k used, 1504012k free, 10384k buffers
Swap: 6291452k total, 5380k used, 6286072k free, 14128k cached
關于這些值表示的具體含義,我在我的博客Linux 記憶體分析工具——free命令中詳細分析過,大家可以參考,
行程的狀態監控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
372007 root 20 0 15160 1336 888 R 0.3 0.1 0:00.33 top
1 root 20 0 19356 236 88 S 0.0 0.0 0:16.06 init
- PID:行程ID,行程的唯一識別符號
- USER:行程所有者的實際用戶名,
- PR:行程的調度優先級,這個欄位的一些值是'rt',這意味這這些行程運行在實時態,
- NI:行程的nice值(優先級),越小的值意味著越高的優先級,負值表示高優先級,正值表示低優先級
- VIRT:行程使用的虛擬記憶體,行程使用的虛擬記憶體總量,單位kb,VIRT=SWAP+RES
- RES:駐留記憶體大小,駐留記憶體是任務使用的非交換物理記憶體大小,行程使用的、未被換出的物理記憶體大小,單位kb,RES=CODE+DATA
- SHR:SHR是行程使用的共享記憶體,共享記憶體大小,單位kb
- S:這個是行程的狀態,它有以下不同的值:
- D - 不可中斷的睡眠態,
- R – 運行態
- S – 睡眠態
- T – 被跟蹤或已停止
- Z – 僵尸態
- %CPU:自從上一次更新時到現在任務所使用的CPU時間百分比,
- %MEM:行程使用的可用物理記憶體百分比,
- TIME+:任務啟動后到現在所使用的全部CPU時間,精確到百分之一秒,
- COMMAND:運行行程所使用的命令,行程名稱(命令名/命令列)
還有許多在默認情況下不會顯示的輸出,它們可以顯示行程的頁錯誤、有效組和組ID和其他更多的資訊,
按下 f 鍵盤可以調出更多顯示選項,按esc鍵回傳top顯示頁,
top的一些命令列引數
- -b:批處理模式(batch mode),可輸出到管道、檔案,默認情況下-b會一直輸出,可以用-nN指定輸出次數,
- -n N:限制輸出次數,
- -d N:重繪時間間隔,
- -p PID:監控指定行程,
- -Hp PID:監控指定行程和進行內執行緒資訊,(比較常用)
top一些互動鍵的說明
進入top頁面后,我們可以進行一些互動操作,下面是一些互動鍵的說明:
- c 顯示完整的命令名,c為Command之意,
- d 修改重繪時間,d為Display之意,
- u 顯示指定用戶相關行程,u為User之意,
- P 按CPU使用排序,P為Processor(處理器)之意,
- M 按記憶體使用排序,M為Momery之意,
- F 排序(進入新的界面,并選擇排序的目標欄位),
- R 順序或逆序,
- H 顯示執行緒
- Z 以多色彩顯示top,
參考
- top命令輸出解釋以及load average 詳解及排查思路
- http://wenku.baidu.com/view/6597f58884254b35eefd34f7.html
- linux top顯示的各個符號引數意義詳解
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/125338.html
標籤:Linux
上一篇:求助 ie瀏覽器報錯
下一篇:關于記事本PE頭匯入地址表的問題
