top命令詳解範例


top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的工作管理員。下面詳細介紹它的使用方法。top是一個動態顯示過程,即可以通過使用者按鍵來不斷重新整理當前狀態.如果在前台執行該命令,它將獨占前台,直到使用者終止該程式為止。比較準確的說,top命令提供了實時的對系統處理器的狀態監視。它將顯示系統中CPU最「敏感」的任務列表.該命令可以按CPU使用。記憶體使用和執行時間對任務進行排序;而且該命令的很多特性都可以通過互動式命令或者在個人客製化檔案中進行設定.

1.命令格式

top [引數]

2.命令功能

顯示當前系統正在執行的進程的相關資訊,包括進程ID、記憶體占用率、CPU占用率等

3.命令引數

  • -b 批次處理
  • -c 顯示完整的治命令
  • -I 忽略失效過程
  • -s 保密模式
  • -S 累積模式
  • -i<時間> 設定間隔時間
  • -u<使用者名> 指定使用者名
  • -p<進程號> 指定進程
  • -n<次數> 迴圈顯示的次數

4.使用範例

範例1:顯示進程資訊

命令:

top

輸出:

top - 04:23:18 up  2:34,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 115 total,   1 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999936 total,   603084 free,   144560 used,   252292 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   631400 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  3186 yiibai    20   0  157676   2164   1528 R  0.7  0.2   0:00.10 top
   653 root      20   0  302436   6016   4648 S  0.3  0.6   1:07.99 vmtoolsd
  1011 root      20   0  553156  18448   5792 S  0.3  1.8   0:04.25 tuned
  2250 root      20   0       0      0      0 S  0.3  0.0   0:23.23 kworker/0:0
  2276 yiibai    20   0  142972   2332   1048 S  0.3  0.2   0:06.39 sshd
     1 root      20   0  128092   6708   3956 S  0.0  0.7   0:05.17 systemd
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd
     3 root      20   0       0      0      0 S  0.0  0.0   0:01.03 ksoftirqd/0
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
     9 root      20   0       0      0      0 S  0.0  0.0   0:03.06 rcu_sched
    10 root      rt   0       0      0      0 S  0.0  0.0   0:00.68 watchdog/0
    12 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 khelper
    13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
    14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
......

說明:
統計資訊區:
前五行是當前系統情況整體的統計資訊區。下面我們看每一行資訊的具體意義。

  • 第一行,任務佇列資訊,同 uptime 命令的執行結果,具體引數說明情況如下:

    • 04:23:18 — 當前系統時間
    • up 2:34 — 系統已經執行了2小時34分鐘(在這期間系統沒有重新啟動過!)
    • 2 users — 當前有2個使用者登入系統
    • load average: 0.00, 0.01, 0.05load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
    • load average資料是每隔5秒鐘檢查一次活躍的進程數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。
  • 第二行,Tasks — 任務(進程),具體資訊說明如下:
    系統現在共有115個進程,其中處於執行中的有1個,114個在休眠(sleep),stoped狀態的有0個,zombie狀態(僵屍)的有0個。

  • 第三行,cpu狀態資訊,具體屬性說明如下:

    • 0.0 us — 使用者空間佔用CPU的百分比。
    • 0.3 sy — 核心空間佔用CPU的百分比。
    • 0.0 ni — 改變過優先順序的進程佔用CPU的百分比
    • 99.7 id — 空閒CPU百分比
    • 0.0 wa — IO等待佔用CPU的百分比
    • 0.0 hi — 硬中斷(Hardware IRQ)佔用CPU的百分比
    • 0.0 si — 軟中斷(Software Interrupts)佔用CPU的百分比
      備註:在這裡CPU的使用比率和windows概念不同,需要理解linux系統使用者空間和核心空間的相關知識!
  • 第四行,記憶體狀態,具體資訊如下:

    • 999936 total — 實體記憶體總量(1GB)
    • 144560 used — 使用中的記憶體總量(140M)
    • 603084 free — 空閒記憶體總量(600M)
    • 252292 buffers/cache — 快取的記憶體量 (169M)
  • 第五行,swap交換分割區資訊,具體資訊說明如下:

    • 2097148 total — 交換區總量
    • 0k used — 使用的交換區總量
    • 2097148 free — 空閒交換區總量
    • 631400 avail Mem — 緩衝的交換區可用記憶體量

    備註:第四行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閒記憶體總量(free)是核心還未納入其管控範圍的數量。納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心。
    如果出於習慣去計算可用記憶體數,這裡有個近似的計算公式:第四行的free + 第四行的buffers + 第五行的cached,按這個公式此台伺服器的可用記憶體。
    對於記憶體監控,在top裡我們要時刻監控第五行swap交換分割區的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。

  • 第六行,空行。

  • 第七行以下:各進程(任務)的狀態監控,專案列資訊說明如下:
    • PID — 進程id
    • USER — 進程所有者
    • PR — 進程優先順序
    • NI — nice值。負值表示高優先順序,正值表示低優先順序
    • VIRT — 進程使用的虛擬記憶體總量,單位kbVIRT=SWAP+RES
    • - RES — 進程使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
    • SHR — 共用記憶體大小,單位kb
    • S — 進程狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍進程
    • %CPU — 上次更新到現在的CPU時間佔用百分比
    • %MEM — 進程使用的實體記憶體百分比
    • TIME+ — 進程使用的CPU時間總計,單位1/100
    • COMMAND — 進程名稱(命令名/命令列)

其他使用技巧:

  • 1.多U多核CPU監控
    top基本檢視中,按鍵盤數位「1」,可監控每個邏輯CPU的狀況:

    觀察上圖,伺服器有0個邏輯CPU,實際上是1個物理CPU。再按數位鍵1,返回到top基本檢視介面。

  • 2.高亮顯示當前執行進程
    敲擊鍵盤「b」(開啟/關閉加亮效果),top的檢視變化如下:

如上圖中,進程id93211的「top」進程被加亮了,top進程就是檢視第二行顯示的唯一的執行態(runing)的那個進程,可以通過敲擊「y」鍵關閉或開啟執行態進程的加亮效果。

  • 3.進程欄位排序
    預設進入top時,各進程是按照CPU的占用量來排序的,在下圖中進程ID為32374的python進程排在第一(cpu占用94%),進程ID為653vmtools進程排在第二(cpu占用2.0%)。

敲擊鍵盤「x」(開啟/關閉排序列的加亮效果),top的檢視變化如下:

可以看到,top預設的排序列是「%CPU」。

  • 4. 通過」shift + >」或」shift + <」可以向右或左改變排序列

下圖是按一次」shift + >」的效果圖,檢視現在已經按照%MEM來排序。

範例2:顯示 完整命令

命令:

top -c

輸出:

top - 09:38:06 up  3:23,  2 users,  load average: 2.40, 2.19, 1.37
Tasks: 112 total,   4 running, 107 sleeping,   1 stopped,   0 zombie
%Cpu(s): 97.2 us,  1.8 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  1.1 si,  0.0 st
KiB Mem :   999936 total,    74648 free,   130200 used,   795088 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   672960 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  3237 yiibai    20   0  123156   4376   1904 R 42.5  0.4  10:45.19 python run+
  3753 yiibai    20   0  123152   4380   1908 R 42.5  0.4   1:38.90 python run+
   653 root      20   0  302436   6024   4648 S  2.3  0.6   1:50.29 /usr/bin/v+
  3709 root      20   0       0      0      0 S  2.0  0.0   0:05.93 [kworker/u+
   652 chrony    20   0  115848   1892   1496 S  1.7  0.2   0:00.53 /usr/sbin/+
   476 root      20   0   34876   3152   2828 S  0.3  0.3   0:00.92 /usr/lib/s+
  2250 root      20   0       0      0      0 S  0.3  0.0   0:38.98 [kworker/0+
     1 root      20   0  128092   6708   3956 S  0.0  0.7   0:05.51 /usr/lib/s+
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.02 [kthreadd]
     3 root      20   0       0      0      0 S  0.0  0.0   0:15.97 [ksoftirqd+
     7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 [migration+
     8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 [rcu_bh]
     9 root      20   0       0      0      0 R  0.0  0.0   0:07.42 [rcu_sched]
    10 root      rt   0       0      0      0 S  0.0  0.0   0:05.48 [watchdog/+

範例3:以批次處理模式顯示程式資訊

命令:

top -b

範例4:以累積模式顯示程式資訊

命令:

top -S

範例5:設定資訊更新次數

命令:

top -n 2

說明:表示更新兩次後終止更新顯示

範例6:設定資訊更新時間

命令:

top -d 3

說明:表示更新週期為3秒

範例7:顯示指定的進程資訊

命令:

top -p 3237
top - 09:40:32 up  3:26,  2 users,  load average: 3.07, 2.53, 1.62
Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
%Cpu(s): 91.8 us,  2.4 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  5.8 si,  0.0 st
KiB Mem :   999936 total,    71276 free,   130352 used,   798308 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   672960 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  3237 yiibai    20   0  123156   4376   1904 R 34.1  0.4  11:46.46 python
  • 5.top互動命令

top 命令執行過程中可以使用的一些互動命令。這些命令都是單字母的,如果在命令列中使用了s 選項, 其中一些命令可能會被遮蔽。

  • h 顯示幫助畫面,給出一些簡短的命令總結說明
  • k 終止一個進程。
  • i 忽略閒置和僵死進程。這是一個開關式命令。
  • q 退出程式
  • r 重新安排一個進程的優先順序別
  • S 切換到累計模式
  • s 改變兩次重新整理之間的延遲時間(單位為s),如果有小數,就換算成m s。輸入0值則系統將不斷重新整理,預設值是5s
  • f或者F 從當前顯示中新增或者刪除專案
  • o或者O 改變顯示專案的順序
  • l 切換顯示平均負載和啓動時間資訊
  • m 切換顯示記憶體資訊
  • t 切換顯示進程和CPU狀態資訊
  • c 切換顯示命令名稱和完整命令列
  • M 根據駐留記憶體大小進行排序
  • P 根據CPU使用百分比大小進行排序
  • T 根據時間/累計時間進行排序
  • W 將當前設定寫入~/.toprc檔案中