Linux 指令詳解 top 系統資源檢測
阿新 • • 發佈:2019-01-31
指令:top 持續的監測整個系統的程式工作狀態
<1>.top是一個優秀的互動式工具,能夠實時顯示當前系統的程序的相關資訊,包括PID、記憶體佔用率、CPU佔用率等,還可以根據需要按CPU佔用情況排序、記憶體使用情況排序。
<2>.如果在前臺執行該命令,它將一直顯示前臺,直到使用者終止該程式
命令格式:
# top [-] [d] [p] [q] [c] [C] [S] [s] [n]
引數說明:
top互動命令:
top輸出解析
# top
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來更改,如下
第四行:實體記憶體使用
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程式中輸入指令的地方
第七行:每個程序使用的資源情況
還有其他預設中不顯示的輸出,所有的顯示如下
注:
<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'
預設如下:
l:切換顯示第二行
t:切換顯示第三行
m:切換顯示Mem和Swap
15、切換全屏和交替模式間: A
交替模式按下A會顯示4個視窗,分別為如下四個欄位:
Def:預設欄位組(預設只顯示這個組)
Job:任務欄位組
Mem:記憶體欄位組
Usr:使用者欄位組
在這個模式下,按a或w可以切換,切換之後按-可以隱藏
------------------------特定應用------------------
1:通過shell指令碼監控
在shell指令碼中新增如下行
top -b -n 2 | grep -E "java| apache2" >> /doiido/logs
2:監視特定程序
將需要監視的程序命令列特徵儲存到KEYS中即可
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
<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工作需要的總時間