『學了就忘』Linux系統管理 — 83、Linux中程式的檢視(top命令)

繁華似錦Fighting發表於2021-12-16

1、top命令介紹

top命令是用來動態顯示系統中程式的命令。

[root@localhost ~]# top [選項]

選項:
  -d秒數:指定top命令每隔幾秒更新。預設是3秒。
  -b:使用批處理模式輸出。一般和"-n"選項合用,用於把top命令重定向到檔案中。
  -n次數:指定top命令執行的次數。一般和“-b”選項合用。
  -p:指定PID。只檢視某個PID的程式。
  -s:使top在安全模式執行,避免在互動模式中出現錯誤。
  -u使用者名稱:只監聽某個使用者的程式。

演示:

image

top命令的互動模式當中可以執行的命令:

  • ?或h:顯示互動模式的幫助。
  • P:以CPU使用率排序,預設就是此項。
  • M:以記憶體的使用率排序。
  • N:以PID排序。
  • T:按照CPU的累積運算時間排序,也就是用TIME+項排序
  • k:按照PID號,給予某個程式一個訊號。一般用於終止某個程式,訊號9是強制終止的訊號。
  • r:按照PID號,給某個程式重設優先順序(Nice)值。
  • q:退出top命令。

提示:按任意鍵就可以返回到top命令的初始互動介面。

2、top命令示例

執行top命令檢視結果:

[root@localhost ~]# top

# 顯示結果如下
top - 19:16:08 up 2 day, 10:34,  2 users,  load average: 0.12, 0.06, 0.06
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1906280k total,   467692k used,  1438588k free,    59528k buffers
Swap:   511996k total,        0k used,   511996k free,   232692k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                      
  5113 root      20   0 15032 1228  936 R  0.7  0.1   0:00.34 top                          
     1 root      20   0 19344 1548 1232 S  0.0  0.1   0:02.63 init                        
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 kthreadd                    
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.38 migration/0                  
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.14 ksoftirqd/0

top命令的輸出內容是動態的,預設每3秒重新整理一次。

命令的輸出主要分為兩大部分:

  • 第一部分是前五行,顯示的是整個系統的資源使用狀況,我們就是通過這些輸出判斷伺服器的健康狀態。
  • 第二部分從第六行開始,顯示的是系統中程式的資訊。

3、top命令輸出項解釋

(1)第一部分的說明

  • 第一行資訊為任務佇列資訊。
    內容 說明
    19:16:08 系統當前時間。
    up 2 day, 10:34 系統的執行時間,本機已經執行2天10小時34分鐘。
    2 users 當前登入了兩個使用者。
    load average: 0.12, 0.06, 0.06 系統在之前1分鐘,5分鐘,15分鐘的平均負載。
    如果CPU是單核,則這個數超過1,就是高負載。
    如果CPU是四核,則這個數超過4,就是高負載。
    (這個平均負載完全是個人經驗來進行判斷的,
    一般認為不應該超過伺服器CPU的核數。)
  • 第二行為程式資訊。
    內容 說明
    Tasks: 112 total 系統中的程式總數。
    1 running 正在執行的程式數。
    111 sleeping 睡眠的程式。
    0 stopped 正在停止的程式。
    0 zombie 殭屍程式。如果不是0,需要手工檢查殭屍程式。
  • 第三行為CPU資訊。
    內容 說明
    Cpu(s): 0.2%us 使用者模式佔用的CPU百分比。
    0.2%sy 系統模式佔用的CPU百分比。
    0.0%ni 改變過優先順序的使用者程式佔用的CPU百分比。
    99.7%id 空閒CPU的CPU百分比。
    0.0%wa 等待輸入/輸出的程式的佔用CPU百分比。
    0.0%hi 硬中斷請求服務佔用的CPU百分比。
    0.0%si 軟中斷請求服務佔用的CPU百分比。
    0.0%st stSteal time)虛擬時間百分比。就是當有虛擬機器時,虛擬CPU等待實際CPU的時間百分比。
  • 第四行為實體記憶體資訊。
    內容 說明
    Mem: 1906280k total 實體記憶體的總量,單位KB。
    467692k used 已經使用的實體記憶體數量。
    1438588k free 空閒的實體記憶體數量,我們使用的是虛擬機器,總共只分配了2GB記憶體,所以只有1438MB左右的空閒記憶體了。
    59528k buffers 作為緩衝的記憶體數量。
  • 第五行為交換分割槽(swap)資訊。
    內容 說明
    Swap: 511996k total 交換分割槽(虛擬記憶體)的總大小。
    0k used 已經使用的互動分割槽的大小。
    511996k free 空閒交換分割槽的大小。
    232692k cached 作為快取的互動分割槽的大小。

說明:

重點觀察的輸出項

  • load average:cpu之前的負載壓力。
  • 99.7%id:cpu空閒。
  • Mem:free:記憶體空間的空閒。
  • Swap:free:Swap空間的空閒。

以上選項就能大概判斷伺服器的壓力大概的情況。

(2)第二部分的說明

第二部分輸出的內容,主要是系統程式資訊。

這部分和ps命令的輸出比較類似,只是如果在終端中執行top命令,不能看到所有的程式,預設是按cpu的佔用率排序的,所以預設只能看到cpu佔比靠前的程式。

例如:

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
  5113 root      20   0 15032 1228  936 R  0.7  0.1   0:00.34 top                         
  • PID:程式ID。
  • USER:該程式所屬的使用者。
  • PR :優先順序,數值越小優先順序越高。
  • NI:優先順序,數值越小優先順序越高。
  • VIRT:該程式使用的虛擬記憶體的大小,單位KB。
  • RES:該程式使用的實體記憶體的大小,單位KB。
  • SHR:共享記憶體大小,單位KB。
  • S:程式狀態。
  • %CPU:該程式佔用CPU的百分比。
  • %MEM:該程式佔用記憶體的百分比。
  • TIME+:該程式總共佔的CPU時間。
  • COMMAND:程式命令名。

4、top命令常用的例項

(1)只檢視PID為5470的sshd的程式

[root@localhost ~]# top -p 5470
top - 20:48:41 up 12:07,  3 users,  load average: 0.00, 0.02, 0.08
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:   1906280k total,   470252k used,  1436028k free,    59528k buffers
Swap:   511996k total,        0k used,   511996k free,   232744k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

  5470 root      20   0 99.7m 4148 3156 S  0.0  0.2   0:00.40 sshd

(2)按"k"鍵終止某個程式

進入到top命令的互動介面,按k鍵,會提示輸入要殺死程式的PID。

按兩次回車就可以殺死程式指定程式。(這種殺掉程式的方式不常用)

下面我們以xinetd程式為例:

image

按兩次回車嗎,xinetd程式被kill掉了,等待3秒重新整理。

image

(3)如何用top命令檢視Linux中所有程式

如果在操作終端執行top命令,並不能看到系統中所有的程式,預設看到的只是CPU佔比靠前的程式。如果我們想要看到所有的程式,可以把top命令的結果重定向到檔案當中即可。

不過top命令是持續執行的,這時就需要-b-n選項了,具體命令如下:

# 讓top命令只執行一次,讓後把結果儲存到top.log檔案中。這樣就能看到所有的程式了
[root@localhost ~]# top -b -n 1 > /root/top.log

說明:
  -b : 可以使top命令內容輸出。
  -n : 指定top命令執行的次數(重新整理一回算一次)。

相關文章