Linux 指令詳解 top 系統資源檢測

指令:top   持續的監測整個系統的程序工作狀態

<1>.top是一個優秀的交互式工具,能夠實時顯示當前系統的進程的相關信息,包括PID、內存佔用率、CPU佔用率等,還可以根據需要按CPU佔用情況排序、內存使用情況排序。
<2>.如果在前臺執行該命令,它將一直顯示前臺,直到用戶終止該程序

命令格式:
# top [-] [d] [p] [q] [c] [C] [S] [s] [n]

參數說明:
-b: 批處理模式。通常用在腳本中,不斷輸出信息
-c: 顯示包含路徑的命令行,而不只是程序名稱
-d: 指定信息刷新的時間間隔(默認是5s)
-i: 不顯示閒置或者僵死進程
-n: 指定顯示的次數。一般與-b搭配使用
-p: 指定進程號。可以指定多個pid
-s: 使top命令在安全模式中運行
-S: 指定累積模式,每個進程的CPU時間爲該進程及關閉的子進程鎖累加的時間
-u: 指定用戶名

top交互命令:
c: 顯示完整的命令
d: 更改刷新頻率
f: 增加或減少要顯示的列(選中的會變成大寫並加*號)
F: 選擇排序的列
h: 顯示幫助畫面
H: 顯示線程
i: 忽略閒置和僵死進程
k: 通過給予一個PID和一個signal來終止一個進程。(默認signal爲15。在安全模式中此命令被屏蔽)
l:  顯示平均負載以及啓動時間(即顯示影藏第一行)
m: 顯示內存信息
M: 根據內存資源使用大小進行排序
N: 按PID由高到低排列
o: 改變列顯示的順序
O: 選擇排序的列,與F完全相同
P: 根據CPU資源使用大小進行排序
q: 退出top命令
r: 修改進程的nice值(優先級)。優先級默認爲10,正值使優先級降低,反之則提高的優先級
s: 設置刷新頻率(默認單位爲秒,如有小數則換算成ms)。默認值是5s,輸入0值則系統將不斷刷新
S: 累計模式(把已完成或退出的子進程佔用的CPU時間累計到父進程的MITE+ )
T: 根據進程使用CPU的累積時間排序
t: 顯示進程和CPU狀態信息(即顯示影藏CPU行)
u: 指定用戶進程
W: 將當前設置寫入~/.toprc文件,下次啓動自動調用toprc文件的設置
<: 向前翻頁
>: 向後翻頁
?: 顯示幫助畫面
1(數字1): 顯示每個CPU的詳細情況
<Space>:立即刷新


top輸出解析
# top
top - 02:53:08 up 24 days, 18:47,  1 user,  load average: 0.02, 0.01, 0.00
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
Cpu(s): 0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3922748k total,   813552k used,  3109196k free,   158292k buffers
Swap:  8191992k total,        0k used,  8191992k free,   505676k cached


  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
 1086 root      20   0 15004 1292 1004 R  0.3  0.1   0:00.11 top                                                   
    1 root      20   0 19232 1476 1188 S  0.0  0.0   0:00.67 init
第一行:
top - 02:53:08 up 24 days, 18:47,  1 user,  load average: 0.02, 0.01, 0.00
top:  表示爲top的指令
02:53:08:  系統當前時間
up 24 days, 18:47:  系統開機到現在經過了多少時間
1 user:  當前連接用戶數
load average: 0.02, 0.01, 0.00:系統1分鐘、5分鐘、15分鐘的平均CPU負載信息

系統平均CPU負載
<1>.load average數據每隔5秒檢查一次活躍的進程數,然後按特定算法計算出的數值。
<2>.在多處理器系統中,CPU負載均值是基於內核的數量決定的。以 100% 負載計算,1.00 表示單個處理器,而 2.00 則說明有兩個雙處理器,同理 4.00 就說明主機具有四個處理器。反推對於雙核處理器,值爲2.00則表示100%負載。
<3>.一般,對於單個處理器這個值應該低於1,除非系統很忙碌。如果這個值高於5則表明系統超負荷運轉。
<4>.有經驗的系統管理員都會將這條線劃在 0.70:

第二行:任務總覽
Tasks:  84 total,   1 running,  83 sleeping,   0 stopped,   0 zombie
Tasks:  任務
84 total:  當前進程總數
1 running:  正在運行的進程數
83 sleeping:  睡眠進程數量
0 stopped:  停止的進程數
0 zombie:  僵死進程數

第三行:cpu狀態  表示這一行顯示CPU總體信息
Cpu(s): 0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu(s):  顯示CPU的信息
us:  用戶空間佔用CPU百分比
sy:  內核空間佔用CPU的百分比
ni:  用戶進程空間中改變過優先級的進程佔用CPU百分比
id:  空閒CPU百分比(反映一個系統cpu的閒忙程度)
wa:  等待輸入輸出(I/O)的CPU時間百分比
hi:  CPU處理硬件中斷佔用的時間
si:  CPU處理軟件中斷佔用的時間 
st:  顯示虛擬機被hypervisor偷去的CPU時間(有虛擬cpu的情況)

注:當有多個CPU時,可能會超過兩行,這個時候就需要使用數字鍵1來更改,如下
Cpu0  :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

第四行:物理內存使用
Mem:   3922748k total,   813552k used,  3109196k free,   158292k buffers
Men:  顯示內存的信息
total:   表示物理內存總量(total = used + free)
used:    表示已經使用的物理內存總量
free:    表示空閒的物理內存(buffers和cached所佔用的也被當作已使用)
buffers: 表示用作內核緩存的物理內存

第五行:虛擬內存使用(交換空間)
Swap:  8191992k total,        0k used,  8191992k free,   505676k cached
Swap: 交換空間
total: 表示交換空間總量
used:  表示使用的交換空間總量
free:  表示空閒的交換空間總量
cached: 表示緩衝交換空間總量

buffers和cached都是linux操作系統底層的機制,目的是爲了加速對磁盤的訪問。
其中buffers指的是塊設備的讀寫緩衝區,cached指的是文件系統本身的頁面緩存。

近似的計算內存總量公式:第四行的free + 第四行的buffers + 第五行的cached

第六行:空行
在top程序中輸入指令的地方

第七行:每個進程使用的資源情況
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
 1086 root      20   0 15004 1292 1004 R  0.3  0.1   0:00.11 top                                                                                                         
    1 root      20   0 19232 1476 1188 S  0.0  0.0   0:00.67 init
PID:  進程的ID(進程的唯一標識符)
USER: 該進程所屬用戶
PR:   進程調度的優先級(值越小越優先被執行,RT表示正在運行中)
NI:   進程的nice值。(範圍-20到19,值越小越優先被執行)
VIRT: 進程使用的虛擬內存總量(單位kb,VIRT=SWAP+RES)
RES:  進程佔用的物理內存。(單位kb。RES=CODE+DATA。%MEM 所顯示的是由此列的值)
SHR:  進程使用的共享內存。(單位kb) 
S:    進程的狀態。主要有以下幾種:
    D.不可中斷的休眠
    S.休眠
    R.正在運行
    T.被跟蹤或已停止
    Z.僵死狀態(殭屍進程)
%CPU: 進程佔用的CPU百分比
%MEM: 進程佔用的物理內存的百分比(以RES列的值爲標準)
TIME+:進程啓動後佔用的總的CPU時間。(單位1/100秒) 
COMMAND: 進程啓動命令名稱


還有其他默認中不顯示的輸出,所有的顯示如下
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。 SWAP = VIRT - RES
q   RES     進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA(應用程序真的使用的內存)
r   CODE    可執行代碼佔用的物理內存大小,單位kb
s   DATA    可執行代碼以外的部分(數據段+棧)佔用的物理內存大小,單位kb
t   SHR     共享內存大小,單位kb
u   nFLT    進程啓動以來頁面錯誤的次數(這個值過高意味着進程從磁盤讀取大量資源)
v   nDRT    最後一次寫入到現在被修改過的頁面數。(通常小於10或者爲0)
w   S       進程狀態
        D.不可中斷的休眠
        S.休眠
        R.正在運行
        T.被跟蹤或已停止
        Z.僵死狀態(殭屍進程)
x   COMMAND 命令名/命令行
y   WCHAN   若該進程在睡眠,則顯示睡眠中的系統函數名
z   Flags   任務標誌,參考 sched.h

注:
<1>.在默認中,是按“%CPU”排序的
<2>.shift + >或shift + <可以向右或左改變排序列
<3>.何時刷新時間需要快於1s:時間段內需要更多的樣本

-------------------------------
參數實例
1、默認輸出:
# top

2、指定輸出次數(-n)
更新5次後退出
# top -n 5

3、批處理模式(-b)
使用批處理模式可以在文件中保存輸出
# top -b

4、2與3結合:
將top的信息處理5次,然後將結果輸出到dodo.txt文件
# top -b -n 5 > /doiido/dodo.txt

5、指定進程(-p)
PID爲0表示爲top命令自身的PID
5.1:監控PID爲3345的進程
# top -p 3345

5.2:監控PID爲3345和PID爲7634的進程
# top -p 3345 -p 7634

6、指定刷新時間(-d)(以秒計)
設置信息刷新時間爲5s(一般設置爲1到3秒的間隔) 
# top -d 5

7、顯示完整命令(-c)
# top -c

8、以累積模式顯示信息(-S)
# top -S

9、指定用戶名(-u,-U)
可以指定顯示的用戶或者UID
9.1、只顯示用戶爲doiido的進程
# top -U doiido

9.2、只顯示UID爲600的進程
# top -u 600

注:-p、-u和-U選項同時只可以使用一個

10、只顯示空閒進程(-i)
# top -i

-------------------------------
交互命令實例
1、幫助:  h或者?

2、立即刷新:  <ENTER> 或者 <SPACE>

3、設置更新刷新間隔:  'd' 或 's'
按下'd'或's'時會提示輸入一個值(以秒爲單位),然後將會以這個值作爲刷新間隔

4、字段管理:  f
按下f後可以選擇想要顯示的字段。(*標記表示已選擇的)
 
5、反向排序:  R
按下R切換反向和常規排序

6、顯示命令:  c
按下c切換完整路徑和程序名
      
7、空閒任務:  i
切換顯示空閒任務

8、指定用戶:  u
按下u會提示輸入用戶名,然後就會顯示特定用戶的進程(空白將會顯示全部用戶)

9、粗體顯示:  B
按下B切換重要信息粗體顯示

10、設置最大顯示任務數:  'n' 或 '#'
按下n或者#後會提示輸入數字,該數字即爲最大顯示的任務數量

11、終止的進程:  k
按下k之後會提示輸入一個PID,然後輸入PID之後會提示輸入給該進程什麼信號
注:一般終止進程使用15信號,如不能正常結束則使用信號9

12、切換高亮信息:  'x' 或者 'y'
x:將排序字段高亮顯示(縱列)
y:將運行進程高亮顯示(橫行)

13、重新設置優先級:  r
重新設置一個任務的優先級(用法和k一樣)

14、切換負載、任務、內存信息的顯示:   'l' 't' 'm' 
默認如下:
top - 09:32:20 up 26 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1914492k total,   148084k used,  1766408k free,     7460k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

l:切換顯示第二行
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1914492k total,   148084k used,  1766408k free,     7452k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

t:切換顯示第三行
top - 09:32:46 up 26 min,  1 user,  load average: 0.00, 0.00, 0.00
Mem:   1914492k total,   148084k used,  1766408k free,     7460k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

m:切換顯示Mem和Swap
top - 09:33:32 up 27 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.5%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

15、切換全屏和交替模式間:  A
交替模式按下A會顯示4個窗口,分別爲如下四個字段:
Def:默認字段組(默認只顯示這個組)
Job:任務字段組
Mem:內存字段組
Usr:用戶字段組
在這個模式下,按a或w可以切換,切換之後按-可以隱藏
:Def - 09:23:09 up 17 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  72 total,   1 running,  71 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1914492k total,   147960k used,  1766532k free,     7380k buffers
Swap:  2047992k total,        0k used,  2047992k free,    37928k cached

1  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                              
     1 root      20   0 19232 1516 1228 S  0.0  0.1   0:01.08 init                                                 
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                                                                                      
2  PID  PPID    TIME+  %CPU %MEM  PR  NI S  VIRT SWAP  RES  UID COMMAND                                            
  1086  1073   0:01.70  0.0  0.1  20   0 R 15004    0 1296    0 top                                                
  1073  1069   0:00.03  0.0  0.1  20   0 S  105m    0 1844    0 bash                                                                               
3  PID %MEM  VIRT SWAP  RES CODE DATA  SHR nFLT nDRT S  PR  NI %CPU COMMAND                                        
  1069  0.2 98.0m    0 4028  520  800 3048    5    0 S  20   0  0.0 sshd                                           
  1034  0.2 81520    0 3424  288  704 2544    2    0 S  20   0  0.0 qmgr                                           
4  PID  PPID  UID USER     RUSER    TTY         TIME+  %CPU %MEM S COMMAND                                         
  1069   949    0 root     root     ?          0:00.94  0.0  0.2 S sshd                                            
  1025     1    0 root     root     ?          0:00.01  0.0  0.2 S master  

------------------------特定應用------------------
1:通過shell腳本監控
在shell腳本中添加如下行
top -b -n 2 | grep -E "java| apache2" >> /doiido/logs

2:監視特定進程
將需要監視的進程命令行特徵保存到KEYS中即可
#!/bin/sh
KEYS='agent|omc4j|terminal|module'

pslist()
{
    ps -ef | egrep $KEYS | grep -v grep
}


readpid()
{
    while read user pid dummy;
    do
        echo -n " -p $pid"
    done
}


top `pslist | readpid`

3、與at或cron結合,在特定時間對資源使用狀態進行快照
# vi test.at
TERM=linux top -b -n 1 > /doiido/dodo.txt
# at -f ./test.at now+1minutes


TERM:Top運行時需要此變量,但“at”在定時調用時並不會保留

4、查看運行時間
# time top -b -n 1
real    0m0.665s
user    0m0.010s
sys     0m0.108s

real:Top工作需要的總時間



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章