1. 程式人生 > 實用技巧 >3.linux top 命令詳解

3.linux top 命令詳解

在 Linux 的使用當中,top命令 也是一個經常會用到的命令,Linux top命令 用於實時動態顯示 Linux程序 的動態資訊。

一、Linux top命令 語法

top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...]

引數說明:

d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s 

q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的許可權,則 top 將會以最高的優先序執行 

c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱

S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來 

s : 安全模式,將交談式指令取消, 避免潛在的危機 

i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程 

n : 更新的次數,完成後將會退出 top 

b : 批次檔模式,搭配 
"n" 引數一起使用,可以用來將 top 的結果輸出到檔案內

二、Linux top命令 例項

1)顯示程序執行狀態資訊

[root@localhost ~]#top
top - 15:38:57 up 39 days, 17:30,  1 user,  load average: 0.10, 0.07, 0.01
Tasks:  95 total,   1 running,  94 sleeping,   0 stopped,   0 zombie
Cpu(s): 11.4%us,  0.7%sy,  0.0%ni, 88.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1018600k total,   831520k used,   187080k free,     9536k buffers
Swap:        0k total,        0k used,        0k free,    54292k cached

  PID USER      PR  NI  VIRT  RES  SHR S 
%CPU %MEM TIME+ COMMAND 954 apache 20 0 369m 55m 4520 S 10.6 5.6 0:01.90 httpd 956 apache 20 0 334m 18m 3292 S 0.3 1.8 0:00.29 httpd

顯示資訊說明:

top命令 所顯示資訊的前五行是當前系統情況整體的統計情況。

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

15:38:57 — 當前系統時間 up 39 days, 17:30 — 系統已經運行了39天17小時30分鐘。 1 users — 當前有1個使用者登入系統 load average: 0.10, 0.07, 0.01 — load average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。 load average資料是每隔5秒鐘檢查一次活躍的程序數,然後按特定演算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了。 第二行,Tasks — 任務(程序),具體資訊說明如下: 系統現在共有95個程序,其中處於執行中的有1個,94個在休眠(sleep),stoped狀態的有0個,zombie狀態(殭屍)的有0個。 第三行,cpu狀態資訊,具體屬性說明如下: us — 使用者空間佔用CPU的百分比。 sy — 核心空間佔用CPU的百分比。 ni — 改變過優先順序的程序佔用CPU的百分比 id — 空閒CPU百分比 wa — IO等待佔用CPU的百分比 hi — 硬中斷(Hardware IRQ)佔用CPU的百分比 si — 軟中斷(Software Interrupts)佔用CPU的百分比 第四行,記憶體狀態,具體資訊如下: total — 實體記憶體總量 used — 使用中的記憶體總量 free — 空閒記憶體總量 buffers — 快取的記憶體量 第五行,swap交換分割槽資訊,具體資訊說明如下: total — 交換區總量 used — 使用的交換區總量 free — 空閒交換區總量 cached — 緩衝的交換區總量

buffers和cached的區別需要說明一下,buffers指的是塊裝置的讀寫緩衝區,cached指的是檔案系統本身的頁面快取。它們都是linux作業系統底層的機制,目的就是為了加速對磁碟的訪問。 備註: 第四行中使用中的記憶體總量(used)指的是現在系統核心控制的記憶體數,空閒記憶體總量(free)是核心還未納入其管控範圍的數量。納入核心管理的記憶體不見得都在使用中,還包括過去使用過的現在可以被重複利用的記憶體,核心並不把這些可被重新使用的記憶體交還到free中去,因此在linux上free記憶體會越來越少,但不用為此擔心。 如果出於習慣去計算可用記憶體數,這裡有個近似的計算公式:第四行的free
+ 第四行的buffers + 第五行的cached,按這個公式可計算出此臺伺服器的可用記憶體。 對於記憶體監控,在top裡我們要時刻監控第五行swap交換分割槽的used,如果這個數值在不斷的變化,說明核心在不斷進行記憶體和swap的資料交換,這是真正的記憶體不夠用了。 第六行,空行。 第七行以下:各程序(任務)的狀態監控,專案列資訊說明如下: PID — 程序id USER — 程序所有者的實際使用者名稱 PR — 程序排程優先順序;這個欄位的一些值是'rt'。這意味這這些程序執行在實時態 NI — nice值。負值表示高優先順序,正值表示低優先順序;越小的值意味著越高的優先順序 VIRT — 程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES;
virtual memory usage 虛擬記憶體,程序使用的虛擬記憶體。程序使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
1、程序“需要的”虛擬記憶體大小,包括程序使用的庫、程式碼、資料等
2、假如程序申請100m的記憶體,但實際只使用了10m,那麼它會增長100m,而不是實際的使用量


RES — 程序使用的、未被換出的實體記憶體大小,單位kb。RES
=CODE+DATA
resident memory usage 常駐記憶體,駐留記憶體大小。駐留記憶體是任務使用的非交換實體記憶體大小。程序使用的、未被換出的實體記憶體大小,單位kb。RES=CODE+DATA
1、程序當前使用的記憶體大小,但不包括swap out
2、包含其他程序的共享
3、如果申請100m的記憶體,實際使用10m,它只增長10m,與VIRT相反
4、關於庫佔用記憶體的情況,它只統計載入的庫檔案所佔記憶體大小


SHR — 共享記憶體大小,單位kb
SHR:shared memory 共享記憶體
1、除了自身程序的共享記憶體,也包括其他程序的共享記憶體
2、雖然程序只使用了幾個共享庫的函式,但它包含了整個共享庫的大小
3、計算某個程序所佔的實體記憶體大小公式:RES – SHR
4、swap out後,它將會降下來


S — 程序狀態。D=不可中斷的睡眠狀態 R=執行 S=睡眠 T=跟蹤/停止 Z=殭屍程序

%CPU — 上次更新到現在的CPU時間佔用百分比
自從上一次更新時到現在任務所使用的CPU時間百分比。%CPU顯示的是程序佔用一個核的百分比,而不是整個cpu(N核)的百分比,有時候可能大於100,
那是因為該程序啟用了多執行緒佔用了多個核心,所以有時候我們看該值得時候會超過100%,但不會超過總核數*100

%MEM — 程序使用的實體記憶體百分比

TIME+ — 程序使用的CPU時間總計,單位1/100秒

COMMAND — 程序名稱(命令名/命令列)

2)顯示程序完整命令

[root@localhost ~]#top -c
top - 15:54:23 up 39 days, 17:45,  1 user,  load average: 0.10, 0.05, 0.00
Tasks:  91 total,   1 running,  90 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.3%us,  0.3%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1018600k total,   524384k used,   494216k free,    15180k buffers
Swap:        0k total,        0k used,        0k free,    65660k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                 
 1414 root      20   0  779m 7832 1836 S  0.3  0.8 134:01.26 /usr/local/aegis/alihids/AliHids                                         
 3308 apache    20   0  366m  51m 3984 S  0.3  5.2   0:00.91 /usr/sbin/httpd                                                          
 3309 apache    20   0  354m  39m 4272 S  0.3  4.0   0:00.45 /usr/sbin/httpd                                                          
 3372 apache    20   0  368m  53m 4004 S  0.3  5.3   0:00.52 /usr/sbin/httpd                                                          
    1 root      20   0 19232  372   84 S  0.0  0.0   0:02.57 /sbin/init

使用此命令可以顯示出程序的詳細命令資訊。

3)以批處理模式顯示程式資訊

命令: top -b

輸出:

4)以累積模式顯示程式資訊

命令:top -S

5)設定資訊更新次數

命令:top -n 2

表示更新兩次後終止更新顯示

6)設定資訊更新時間

命令: top -d 3

表示更新週期為3秒

7)顯示指定的程序資訊

命令:top -p 574

輸出:

8)其他說明:

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

以下是 Linux top命令 的一些可使用的互動命令。

h 顯示幫助畫面,給出一些簡短的命令總結說明

k 終止一個程序。

i 忽略閒置和僵死程序。這是一個開關式命令。

q 退出程式

r 重新安排一個程序的優先級別

S 切換到累計模式

s 改變兩次重新整理之間的延遲時間(單位為s),如果有小數,就換算成m s。輸入0值則系統將不斷重新整理,預設值是5 s

f或者F 從當前顯示中新增或者刪除專案

o或者O 改變顯示專案的順序

l 切換顯示平均負載和啟動時間資訊

m 切換顯示記憶體資訊

T 根據時間/累計時間進行排序

W 將當前設定寫入~/.toprc檔案中

t:顯示和隱藏任務/cpu資訊;m:記憶體資訊 1:監控每個邏輯CPU的狀況; f:進入欄位顯示配置模式,可增加或者移除顯示欄位,按相應的字母新增或去除;o:進入欄位順序設定模式,可配置顯示位置順序,按相應的字母往下移動,按“shift+相應的字母”往上移動 ---------常用 F:進入欄位排序配置模式,可設定排序的欄位; R:正常排序/反向排序; s:設定重新整理的時間--------常用 u:輸入使用者,顯示使用者的任務 i:忽略閒置和僵死程序。這是一個開關式命令。 r:重新安排一個程序的優先級別。系統提示使用者輸入需要改變的程序PID以及需要設定的程序優先順序值。輸入一個正值將使優先順序降低,反之則可以使該程序擁有更高的優先權。預設值是10。 c:切換顯示命令名稱和完整命令列。 M:根據駐留記憶體大小進行排序。-------------常用 P:根據CPU使用百分比大小進行排序。-----------常用 H:顯示執行緒

附常用操作:
top //每隔5秒顯式所有程序的資源佔用情況
top -d 2 //每隔2秒顯式所有程序的資源佔用情況
top -c //每隔5秒顯式程序的資源佔用情況,並顯示程序的命令列引數(預設只有程序名)
top -p 12345 -p 6789//每隔5秒顯示pid是12345和pid是6789的兩個程序的資源佔用情況
top -d 2 -c -p 123456 //每隔2秒顯示pid是12345的程序的資源使用情況,並顯式該程序啟動的命令列引數

參考:http://www.linuxdaxue.com/linux-command-intro-top.html