1. 程式人生 > >Linux Top 命令

Linux Top 命令

休眠 硬盤 文件 交換分區 服務 僵屍進程 processes image 不同的

linux查看進程使用最多的命令應該是top命令了吧,我們今天主要說明一下,top命令結果中各參數的意義,top命令結果如下:

技術分享圖片

直觀上結果分為上下兩部分,上部分主要是系統的信息,下部分是系統進程信息,下面詳細說明一下:

技術分享圖片

第一行代表了系統運行時間,分別表示:

系統時間,系統運行到現在的時間,當前登陸系統的用戶數、系統平均負載的三個值,分別是5分鐘、10分鐘、15分鐘。

tip:說明一下什麽是系統負載,一般負載值越小越好,值也高說明系統的可能是出現了某種問題的信息,但是也並不是絕對的

借用網友的文章說明一下:https://www.cnblogs.com/TaleG/p/6030992.html

一只單核的處理器可以形象得比喻成一條單車道,數字在0-1之間算正常,這樣來一輛車,該車不會等待直接通過;

0表示路上沒有車

1.00 表示道路還算正常,但有可能會惡化並造成擁堵。此時系統已經沒有多余的資源了,管理員需要進行優化;

1.00-*** 表示路況不太好了,如果到達2.00表示有橋上車輛一倍數目的車輛正在等待。這種情況你必須進行檢查了

技術分享圖片

如果我們有兩條行車道呢?

技術分享圖片

滿負荷狀態的數字為 "1.00 * CPU核數",即雙核CPU為2.00,四核CPU為4.00

SO:

單核負載在0.7以下是安全的,超過0.7就需要進行優化了

那應該看那個參數??

看5分鐘和15分鐘的比較好,即後面2個數字。

CPU的核數如何獲取呢??

grep model name /proc/cpuinfo | wc -l

CPU核心數目N,觀察後面2個數字,用數字/N,如果得到的值小於0.7即可無憂

上一張字段說明圖:

技術分享圖片

說明了第一行,第二行啥意思?

其實一眼就應該看出來,應該是系統進程數,第一列表示系統總進程數其次是運行進程、休眠進程、停止進程和僵屍進程

技術分享圖片

之後是系統CPU運行時間,“用戶空間占用CPU百分比”、“內核空間占用CPU百分比”、“用戶空間內改變過優先級的進程占用CPU百分比”、“空閑CPU百分比”、“等待輸入輸出CPU時間百分比”、“CPU服務於硬件中斷所耗費的時間總額”、“CPU服務軟中斷所耗費的時間總額”、“Steal Time”

技術分享圖片

那麽CPU各個參數都代表了什麽意思呢?

看看那官方解釋:

us: user cpu time (or) % CPU time spent in user space

sy: system cpu time (or) % CPU time spent in kernel space

ni: user nice cpu time (or) % CPU time spent on low priority processes

id: idle cpu time (or) % CPU time spent idle

wa: io wait cpu time (or) % CPU time spent in wait (on disk)

hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts

si: software irq (or) % CPU time spent servicing/handling software interrupts

st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine

簡單翻譯一下:

us:用戶態使用的cpu時間比

sy:系統態使用的cpu時間比

ni:用做nice加權的進程分配的用戶態cpu時間比

id:空閑的cpu時間比

wa:cpu等待磁盤寫入完成時間

hi:硬中斷消耗時間

si:軟中斷消耗時間

st:虛擬機偷取時間

然並卵,還是不懂:

我們還是看看CPU的百分比是如何計算的吧:

比如一秒內有100個cpu時間片,這個cpu時間片就是cpu工作的最小單位。那麽這100個cpu時間片在不同的區域和目的進行操作使用,就代表這個區域所占用的cpu時間比。也就是這裏得出的cpu時間百分比,比如

技術分享圖片

將文件從磁盤的src位置拷貝到磁盤的dst位置。文件會從src先讀取進入到內核空間,然後再讀取到用戶空間,然後拷貝數據到用戶空間的buf上,再通過用戶空間,內核空間,數據才到磁盤的dst上

所以從上面這個程序來看,cpu消耗在kernel space的時候就是sy(系統態使用的cpu百分比),cpu消耗在user space的時候就是us(用戶態使用的cpu百分比)。そうか

弄明白了前兩個,在說說hi和si兩個參數

如果程序都沒什麽問題,那麽是沒有hi和si的,但是實際上有個硬中斷和軟中斷的概念。比如硬中斷,cpu在執行程序的時候,突然外設硬件(比如硬盤出現問題了)機器需要立刻通知cpu進行現場保存工作。這個時候會cpu會出現上下文切換。就是cpu會有一部分時間會被硬中斷占用了,這個時間就是hi。相類似,si是軟中斷的cpu占用時間,軟中斷是由軟件的指令方式觸發的。

相關軟中斷和硬中斷的概念可以參考:

http://blog.csdn.net/pxz_002/article/details/7327668

下面是nice參數

ni是nice的意思,nice是什麽呢,每個linux進程都有個優先級,優先級高的進程有優先執行的權利,這個叫做pri。進程除了優先級外,還有個優先級的修正值。即比如你原先的優先級是20,然後修正值為-2,那麽你最後的進程優先級為18。這個修正值就叫做進程的nice值。

那麽問題來了,修改值是一個數字,怎麽會占用系統時間呢???

ni是指用做nice加權的進程使用的用戶態cpu時間比,我的理解就是一個進程的所謂修正值就意味著多分配一些cpu時間給這個進程的用戶態,這個中間所多分配的cpu時間就是我們這裏的ni。(這個理解沒啥把握,如果有錯誤麻煩幫忙指出下)

之後是內存:

技術分享圖片

第五行是交換分區:

技術分享圖片

最後是進程信息:

技術分享圖片

Linux Top 命令