Top命令是linux 下常用的系統性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于windows的任務管理器。下面詳細介紹它的使用方法。

?

        top 可以顯示當前系統正在執行的進程的相關信息,包括進程ID、內存占用率、CPU占用率等

參數
-b 批處理
-c 顯示完整的治命令
-I 忽略失效過程
-s 保密模式
-S 累積模式

-i<時間> 設置間隔時間
-u<用戶名> 指定用戶名
-p<進程號> 指定進程
-n<次數> 循環顯示的次數
      

?

        top - 14:47:16 up? 4:11,? 1 user,? load average: 0.00, 0.01, 0.05
Tasks:? 83 total,?? 1 running,? 80 sleeping,?? 2 stopped,?? 0 zombie
Cpu(s):? 0.0%us,? 0.2%sy,? 0.0%ni, 99.6%id,? 0.1%wa,? 0.0%hi,? 0.0%si,? 0.0%st
Mem:??? 508176k total,?? 301812k used,?? 206364k free,??? 63280k buffers
Swap:?? 521212k total,??????? 0k used,?? 521212k free,?? 175284k cached

? PID USER????? PR? NI? VIRT? RES? SHR S %CPU %MEM??? TIME+? COMMAND??????????????????????? ?
?1774 root????? 20?? 0? 2856 1076? 852 R? 7.6? 0.2?? 0:00.09 top??????????????????????????? ?
??? 1 root????? 20?? 0? 3540 1920 1252 S? 0.0? 0.4?? 0:01.73 init?????????????????????????? ?
??? 2 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.03 kthreadd?????????????????????? ?
??? 3 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.62 ksoftirqd/0??????????????????? ?
??? 5 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.49 kworker/u:0??????????????????? ?
??? 6 root????? RT?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 migration/0??????????????????? ?
??? 7 root????? RT?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.60 watchdog/0???????????????????? ?
??? 8 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 cpuset???????????????????????? ?
??? 9 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 khelper??????????????????????? ?
?? 10 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.01 kdevtmpfs????????????????????? ?
?? 11 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 netns????????????????????????? ?
?? 12 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.47 sync_supers??????????????????? ?
?? 13 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 bdi-default??????????????????? ?
?? 14 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 kintegrityd??????????????????? ?
?? 15 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 kblockd??????????????????????? ?
?? 16 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 ata_sff??????????????????????? ?
?? 17 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.07 khubd????????????????????????? ?
?? 18 root?????? 0 -20???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 md???????????????????????????? ?
?? 21 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.02 khungtaskd???????????????????? ?
?? 22 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.01 kswapd0??????????????????????? ?
?? 23 root????? 25?? 5???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 ksmd?????????????????????????? ?
?? 24 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 fsnotify_mark????????????????? ?
?? 25 root????? 20?? 0???? 0??? 0??? 0 S? 0.0? 0.0?? 0:00.00 ecryptfs-kthrea??? ?
? ?
      

統計信息區

?

前五行是系統整體的統計信息。第一行是任務隊列信息,同 uptime 命令的執行結果。其內容如下:

        01:06:48?? ??? ??? ??? ??? ??? ?當前時間
up 1:22?? ??? ??? ??? ??? ??? ??? ?系統運行時間,格式為時:分
1 user?? ??? ??? ??? ??? ??? ??? ?當前登錄用戶數
load average: 0.06, 0.60, 0.48?? ?系統負載,即任務隊列的平均長度。

三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

第二、三行為進程和CPU的信息。當有多個CPU時,這些內容可能會超過兩行。內容如下:

Tasks: 29 total?? ??? ?進程總數
1 running?? ??? ??? ?正在運行的進程數
28 sleeping?? ??? ??? ?睡眠的進程數
0 stopped?? ??? ??? ?停止的進程數
0 zombie?? ??? ??? ?僵尸進程數
Cpu(s): 0.3% us?? ??? ?用戶空間占用CPU百分比
1.0% sy?? ??? ??? ??? ?內核空間占用CPU百分比
0.0% ni?? ??? ??? ??? ?用戶進程空間內改變過優先級的進程占用CPU百分比
98.7% id?? ??? ??? ?空閑CPU百分比
0.0% wa?? ??? ??? ??? ?等待輸入輸出的CPU時間百分比
0.0% hi?? ? 
0.0% si?? ? 

最后兩行為內存信息。內容如下:

Mem: 191272k total?? ??? ?物理內存總量
173656k used?? ??? ??? ?使用的物理內存總量
17616k free?? ??? ??? ??? ?空閑內存總量
22052k buffers?? ??? ??? ?用作內核緩存的內存量
Swap: 192772k total?? ??? ?交換區總量
0k used?? ??? ??? ??? ??? ?使用的交換區總量
192772k free?? ??? ??? ?空閑交換區總量
123988k cached?? ??? ??? ?緩沖的交換區總量。

內存中的內容被換出到交換區,而后又被換入到內存,但使用過的交換區尚未被覆蓋,
該數值即為這些內容已存在于內存中的交換區的大小。
相應的內存再次被換出時可不必再對交換區寫入。


      

進程信息區


        統計信息區域的下方顯示了各個進程的詳細信息。首先來認識一下各列的含義。

序號?? ?列名?? ?含義
a?? ??? ?PID?? ??? ?進程id
b?? ??? ?PPID?? ?父進程id
c?? ??? ?RUSER?? ?Real user name
d?? ??? ?UID?? ??? ?進程所有者的用戶id
e?? ??? ?USER?? ?進程所有者的用戶名
f?? ??? ?GROUP?? ?進程所有者的組名
g?? ??? ?TTY?? ??? ?啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h?? ??? ?PR?? ??? ?優先級
i?? ??? ?NI?? ??? ?nice值。負值表示高優先級,正值表示低優先級
j?? ??? ?P?? ??? ?最后使用的CPU,僅在多CPU環境下有意義
k?? ??? ?%CPU?? ?上次更新到現在的CPU時間占用百分比
l?? ??? ?TIME?? ?進程使用的CPU時間總計,單位秒
m?? ??? ?TIME+?? ?進程使用的CPU時間總計,單位1/100秒
n?? ??? ?%MEM?? ?進程使用的物理內存百分比
o?? ??? ?VIRT?? ?進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p?? ??? ?SWAP?? ?進程使用的虛擬內存中,被換出的大小,單位kb。
q?? ??? ?RES?? ??? ?進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
r?? ??? ?CODE?? ?可執行代碼占用的物理內存大小,單位kb
s?? ??? ?DATA?? ?可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
t?? ??? ?SHR?? ??? ?共享內存大小,單位kb
u?? ??? ?nFLT?? ?頁面錯誤次數
v?? ??? ?nDRT?? ?最后一次寫入到現在,被修改過的頁面數。
w?? ??? ?S?? ??? ?進程狀態。
?? ??? ??? ??? ?D=不可中斷的睡眠狀態
?? ??? ??? ??? ?R=運行
?? ??? ??? ??? ?S=睡眠
?? ??? ??? ??? ?T=跟蹤/停止
?? ??? ??? ??? ?Z=僵尸進程
x?? ??? ?COMMAND?? ?命令名/命令行
y?? ??? ?WCHAN?? ?若該進程在睡眠,則顯示睡眠中的系統函數名
z?? ??? ?Flags?? ?任務標志,參考 sched.h

默認情況下僅顯示比較重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通過下面的快捷鍵來更改顯示內容。
      

?

下面是top命令的部分截圖:

?

第一行 分別顯示:系統當前時間 系統運行時間 當前用戶登陸數 系統負載。

*系統負載(load average),這里有三個數值,分別是系統最近1分鐘,5分鐘,15分鐘的平均負載。一般對于單個處理器來說,負載在0 — 1.00 之間是正常的,超過1.00就要引起注意了。在多核處理器中,你的系統均值不應該高于處理器核心的總數。

?

第二行 分別顯示:total進程總數、 running正在運行的進程數、 sleeping睡眠的進程數、stopped停止的進程數、 zombie僵尸進程數。?

?

第三行

分別顯示:

  • %us 用戶空間占用CPU百分比、
  • %sy 內核空間占用CPU百分比、
  • %ni 用戶進程空間內改變過優先級的進程占用CPU百分比、
  • ?%id 空閑CPU百分比、
  • %wa 等待輸入輸出(I/O)的CPU時間百分比 、
  • %hi指的是cpu處理硬件中斷的時間、%si指的是cpu處理軟中斷的時間 、
  • %st用于有虛擬cpu的情況,用來指示被虛擬機偷掉的cpu時間。

通常id%值可以反映一個系統cpu的閑忙程度。

?

第四行 MEM :total 物理內存總量、??? used 使用的物理內存總量、free 空閑內存總量、??? buffers 用作內核緩存的內存量。

?

第五行 SWAP:total 交換區總量、 ????used 使用的交換區總量、free 空閑交換區總量、 cached 緩沖的交換區總量。

?

buffers和cached的區別需要說明一下,buffers指的是塊設備的讀寫緩沖區,cached指的是文件系統本身的頁面緩存。它們都是linux操作系統底層的機制,目的就是為了加速對磁盤的訪問。

?

第六行 ?PID(進程號)、 USER(運行用戶)、PR(優先級)、NI(任務nice值)、VIRT(虛擬內存用量)VIRT=SWAP+RES 、RES(物理內存用量)、SHR(共享內存用量)、S(進程狀態)、%CPU(CPU占用比)、%MEM( 物理內存 占用比)、TIME+(累計CPU占用時間)、 COMMAND 命令名/命令行。