Linux中常用的監(jiān)控命令
在以前使用windows系統(tǒng)的時(shí)候,常常會遇到系統(tǒng)變卡,然后我們就會使用快捷鍵 ctrl+shift+ESC 來調(diào)出windows的任務(wù)管理器,我們可以看到當(dāng)前運(yùn)行的進(jìn)程,進(jìn)程所占的CPU資源,內(nèi)存資源等,還可以直接強(qiáng)制結(jié)束掉進(jìn)程。
我們在使用linux的時(shí)候也同樣會出現(xiàn)這樣的問題,如果你遇到了,那么你就要學(xué)會這些linux查看系統(tǒng)資源的命令。
[toc]
下面我分為這么幾個(gè)角度分別說下這些命令的使用:
- 整機(jī)
- CPU
- 內(nèi)存
- 硬盤
- 磁盤
- 網(wǎng)絡(luò)I/O
整機(jī)
top 命令
參數(shù)說明:
-
d:指定每兩次屏幕信息刷新之間的時(shí)間間隔。當(dāng)然用戶可以使用s交互命令來改變之。 -
p:通過指定監(jiān)控進(jìn)程ID來僅僅監(jiān)控某個(gè)進(jìn)程的狀態(tài)。 -
q:該選項(xiàng)將使top沒有任何延遲的進(jìn)行刷新。如果調(diào)用程序有超級用戶權(quán)限,那么top將以盡可能高的優(yōu)先級運(yùn)行。 -
S:指定累計(jì)模式。 -
s:使top命令在安全模式中運(yùn)行。這將去除交互命令所帶來的潛在危險(xiǎn)。 -
i:使top不顯示任何閑置或者僵死進(jìn)程。 -
c:顯示整個(gè)命令行而不只是顯示命令名。
常用命令說明:
-
Ctrl+L:擦除并且重寫屏幕 -
K:終止一個(gè)進(jìn)程。系統(tǒng)將提示用戶輸入需要終止的進(jìn)程PID,以及需要發(fā)送給該進(jìn)程什么樣的信號。一般的終止進(jìn)程可以使用15信號;如果不能正常結(jié)束那就使用信號9強(qiáng)制結(jié)束該進(jìn)程。默認(rèn)值是信號15。在安全模式中此命令被屏蔽。 -
i:忽略閑置和僵死進(jìn)程。這是一個(gè)開關(guān)式命令。 -
q:退出程序 -
r:重新安排一個(gè)進(jìn)程的優(yōu)先級別。系統(tǒng)提示用戶輸入需要改變的進(jìn)程PID以及需要設(shè)置的進(jìn)程優(yōu)先級值。輸入一個(gè)正值將使優(yōu)先級降低,反之則可以使該進(jìn)程擁有更高的優(yōu)先權(quán)。默認(rèn)值是10。 -
S:切換到累計(jì)模式。 -
s:改變兩次刷新之間的延遲時(shí)間。系統(tǒng)將提示用戶輸入新的時(shí)間,單位為s。如果有小數(shù),就換算成m s。輸入0值則系統(tǒng)將不斷刷新,默認(rèn)值是5 s。需要注意的是如果設(shè)置太小的時(shí)間,很可能會引起不斷刷新,從而根本來不及看清顯示的情況,而且系統(tǒng)負(fù)載也會大大增加。 -
f或者F:從當(dāng)前顯示中添加或者刪除項(xiàng)目。 -
o或者O:改變顯示項(xiàng)目的順序 -
l:切換顯示平均負(fù)載和啟動時(shí)間信息。 -
m:切換顯示內(nèi)存信息。 -
t:切換顯示進(jìn)程和CPU狀態(tài)信息。 -
c:切換顯示命令名稱和完整命令行。 -
M:根據(jù)駐留內(nèi)存大小進(jìn)行排序。 -
P:根據(jù)CPU使用百分比大小進(jìn)行排序。 -
T:根據(jù)時(shí)間/累計(jì)時(shí)間進(jìn)行排序。 -
W:將當(dāng)前設(shè)置寫入~/.toprc文件中。
當(dāng)我們輸入top命令后我們可以看到:

其中有一行是白色的,白色中顯示的是字段名稱:
PID: 進(jìn)程id號
PPID:父進(jìn)程id號
UID:有效用戶id號
USER:有效用戶名
RUSER: 真實(shí)用戶名
TTY:終端設(shè)備
%CPU:計(jì)算資源
%MEN:內(nèi)存
%TIME+:CPU時(shí)間
VIRT:virtual memory usage 虛擬內(nèi)存
- 進(jìn)程“需要的”虛擬內(nèi)存大小,包括進(jìn)程使用的庫、代碼、數(shù)據(jù)等
- 假如進(jìn)程申請100m的內(nèi)存,但實(shí)際只使用了10m,那么它會增長100m,而不是實(shí)際的使用量
RES:resident memory usage 常駐內(nèi)存
- 進(jìn)程當(dāng)前使用的內(nèi)存大小,但不包括swap out
- 包含其他進(jìn)程的共享
- 如果申請100m的內(nèi)存,實(shí)際使用10m,它只增長10m,與VIRT相反
- 關(guān)于庫占用內(nèi)存的情況,它只統(tǒng)計(jì)加載的庫文件所占內(nèi)存大小
SHR:shared memory 共享內(nèi)存
- 除了自身進(jìn)程的共享內(nèi)存,也包括其他進(jìn)程的共享內(nèi)存
- 雖然進(jìn)程只使用了幾個(gè)共享庫的函數(shù),但它包含了整個(gè)共享庫的大小
- 計(jì)算某個(gè)進(jìn)程所占的物理內(nèi)存大小公式:RES – SHR
- swap out后,它將會降下來
uptime 命令
簡化版top命令
從上面的參數(shù),top命令顯示的內(nèi)容,我們就可以看到很多的參數(shù),也是特別詳細(xì)的,但是我們可能有時(shí)候就只是想了解一些簡單的信息,這時(shí)候我們就可以使用uptime這個(gè)命令了。
root@VM-0-4-ubuntu:~# uptime
15:17:22 up 171 days, 16:56, 1 user, load average: 0.00, 0.02, 0.02
- 系統(tǒng)當(dāng)前時(shí)間 15:17:22
- 171 days, 16:56 從上次啟動開始系統(tǒng)運(yùn)行的時(shí)間
- 1 user 注意這里實(shí)際是連接數(shù)量,可以自己測試出來,同一用戶多個(gè)連接的時(shí)候算多個(gè)
- load average: 0.00, 0.02, 0.02 這是重頭戲,分別描述了1分鐘5分鐘15分鐘內(nèi)系統(tǒng)平均負(fù)載
參數(shù)
- -p, --pretty show uptime in pretty format//以比較友好的格式輸出
- -h, --help display this help text//顯示幫助選項(xiàng)
- -s, --since system up since, in yyyy-mm-dd HH:MM:SS format//系統(tǒng)啟動時(shí)間
- -V, --version display version information and exit//版本信息
CPU
vmstat 命令
vmstat命令可以查看很多信息,包括服務(wù)器的CPU使用率,內(nèi)存使用,虛擬內(nèi)存交換情況,IO讀寫情況。但是我們一般使用vmstat命令一般常用來查看cpu的情況。
參數(shù)
-a:顯示活躍和非活躍內(nèi)存-f:顯示從系統(tǒng)啟動至今的fork數(shù)量 。-m:顯示slabinfo-n:只在開始時(shí)顯示一次各字段名稱。-s:顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動數(shù)量。delay:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無窮。-d:顯示磁盤相關(guān)統(tǒng)計(jì)信息。-p:顯示指定磁盤分區(qū)統(tǒng)計(jì)信息-S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認(rèn)單位為K(1024 bytes)-V:顯示vmstat版本信息。

-
procs(進(jìn)程)-
r:當(dāng)前運(yùn)行隊(duì)列中線程的數(shù)目,代表線程處于可運(yùn)行狀態(tài),但CPU還未能執(zhí)行.,這個(gè)值可以作為判斷CPU是否繁忙的一個(gè)指標(biāo);當(dāng)這個(gè)值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了;這個(gè)我們可以結(jié)合top命令的負(fù)載值同步評估系統(tǒng)性能; -
b:等待IO的進(jìn)程數(shù)量;如果該值一直都很大,說明IO比較繁忙,處理較慢;
-
-
memory(內(nèi)存)-
swpd:虛擬內(nèi)存已使用的大??;如果swpd的值不為0,但是si,so的值長期為0,這種情況不會影響系統(tǒng)性能; -
free:空閑的物理內(nèi)存的大?。?/li> -
buff:用作緩沖的內(nèi)存大??; -
cache:用作緩存的內(nèi)存大??;如果cache的值大的時(shí)候,說明cache處的文件數(shù)多,如果頻繁訪問到的文件都能被cache處,那么磁盤的讀IO bi會非常小;
-
-
swap(交換空間,單位:KB);內(nèi)存夠用的時(shí)候,這2個(gè)值都是0,如果這2個(gè)值長期大于0時(shí),系統(tǒng)性能會受到影響,磁盤IO和CPU資源都會被消耗。有時(shí)我們看到空閑內(nèi)存(free)很少的或接近于0時(shí),就認(rèn)為內(nèi)存不夠用了,不能光看這一點(diǎn),還要結(jié)合si和so,如果free很少,但是si和so也很少(大多時(shí)候是0),那么不用擔(dān)心,系統(tǒng)性能這時(shí)不會受到影響的;-
si:每秒從交換區(qū)寫到內(nèi)存的大?。?/li> -
so:每秒寫入交換區(qū)的內(nèi)存大小;
-
-
io(單位:塊/秒)-
bi:每秒讀取的塊數(shù); -
bo:每秒寫入的塊數(shù);隨機(jī)磁盤讀寫的時(shí)候,這2個(gè)值越大,能看到CPU在IO等待的值也會越大;
-
-
system(系統(tǒng));這2個(gè)值越大,會看到由內(nèi)核消耗的CPU時(shí)間會越大;-
in:每秒中斷數(shù),包括時(shí)鐘中斷; -
cs:每秒上下文切換數(shù);
-
-
cpu(以百分比表示)-
us:用戶進(jìn)程執(zhí)行時(shí)間(user time); -
sy:系統(tǒng)進(jìn)程執(zhí)行時(shí)間(system time);如果us+sy大于80%系統(tǒng)負(fù)擔(dān)就比較大了。 -
id:空閑時(shí)間(包括IO等待時(shí)間); -
wa:等待IO時(shí)間;wa的值高時(shí),說明IO等待比較嚴(yán)重,這可能由于磁盤大量作隨機(jī)訪問造成,也有可能磁盤出現(xiàn)瓶頸。
-
mpstat 命令
查看所有cpu核的信息
常用 mpstat -P ALL 2 每兩秒采樣一次所有cpu的信息
參數(shù)
mpstat [-P {|ALL}] [internal [count]]
-
-P {|ALL}表示監(jiān)控哪個(gè)CPU, cpu在[0,cpu個(gè)數(shù)-1]中取值 -
internal相鄰的兩次采樣的間隔時(shí)間、 -
count采樣的次數(shù),count只能和delay一起使用
當(dāng)沒有參數(shù)時(shí),mpstat則顯示系統(tǒng)啟動以后所有信息的平均值。有interval時(shí),第一行的信息自系統(tǒng)啟動以來的平均信息。從第二行開始,輸出為前一個(gè)interval時(shí)間段的平均信息。

字段說明:
-
%usr:表示用戶進(jìn)程所使用CPU的百分比 -
%nice:表示使用nice命令對進(jìn)程進(jìn)行降級時(shí)CPU的百分比 %sys:表示內(nèi)核進(jìn)程使用CPU的百分比 -
%iowait:表示等待進(jìn)行 I/O 所使用 CPU 的時(shí)間百分比 -
%irq:表示用于處理系統(tǒng)中斷的 CPU 百分比 -
%soft:表示用于軟件中斷的 CPU 百分比 -
%steal: 顯示虛擬機(jī)管理器在服務(wù)另一個(gè)虛擬處理器時(shí)虛擬CPU處在非自愿等待下花費(fèi)時(shí)間的百分比 -
%guest: 顯示運(yùn)行虛擬處理器時(shí)CPU花費(fèi)時(shí)間的百分比 -
%idle:顯示 CPU 的空閑時(shí)間
pidstat命令
主要用于監(jiān)控全部或指定進(jìn)程占用系統(tǒng)資源的情況。但是我們一般都是用這個(gè)命令查看具體的某一個(gè)進(jìn)程的詳細(xì)情況。
-
-u:默認(rèn)的參數(shù),顯示各個(gè)進(jìn)程的cpu使用統(tǒng)計(jì) -
-r:顯示各個(gè)進(jìn)程的內(nèi)存使用統(tǒng)計(jì) -
-d:顯示各個(gè)進(jìn)程的IO使用情況 -
-p:指定進(jìn)程號 -
-w:顯示每個(gè)進(jìn)程的上下文切換情況 -
-t:顯示選擇任務(wù)的線程的統(tǒng)計(jì)信息外的額外信息 -
-T { TASK | CHILD | ALL }
這個(gè)選項(xiàng)指定了pidstat監(jiān)控的。TASK表示報(bào)告獨(dú)立的task,CHILD關(guān)鍵字表示報(bào)告進(jìn)程下所有線程統(tǒng)計(jì)信息。ALL表示報(bào)告獨(dú)立的task和task下面的所有線程。
注意:task和子線程的全局的統(tǒng)計(jì)信息和pidstat選項(xiàng)無關(guān)。這些統(tǒng)計(jì)信息不會對應(yīng)到當(dāng)前的統(tǒng)計(jì)間隔,這些統(tǒng)計(jì)信息只有在子線程kill或者完成的時(shí)候才會被收集。 -
-V:版本號 -
-h:在一行上顯示了所有活動,這樣其他程序可以容易解析。 -
-I:在SMP環(huán)境,表示任務(wù)的CPU使用率/內(nèi)核數(shù)量 -
-l:顯示命令名和所有參數(shù)
但是我們還是經(jīng)常這樣使用這個(gè)命令:

字段說明
-
PID:進(jìn)程ID -
%usr:進(jìn)程在用戶空間占用cpu的百分比 -
%system:進(jìn)程在內(nèi)核空間占用cpu的百分比 -
%guest:進(jìn)程在虛擬機(jī)占用cpu的百分比 -
%CPU:進(jìn)程占用cpu的百分比 -
CPU:處理進(jìn)程的cpu編號 -
Command:當(dāng)前進(jìn)程對應(yīng)的命令
內(nèi)存
free 命令
這是我們用來查看系統(tǒng)內(nèi)存信息最常用的命令。
參數(shù)
-
-b:以Byte為單位顯示內(nèi)存使用情況; -
-k:以KB為單位顯示內(nèi)存使用情況; -
-m:以MB為單位顯示內(nèi)存使用情況; -
-g:以GB為單位顯示內(nèi)存的使用情況; -
-o:不顯示緩沖區(qū)調(diào)節(jié)列; -
-s<間隔秒數(shù)>:持續(xù)觀察內(nèi)存使用狀況; -
-t:顯示內(nèi)存總和列; -
-V:顯示版本信息。

字段說明
- total 內(nèi)存總數(shù): 15.7G
- used 已經(jīng)使用的內(nèi)存數(shù): 15.6G
- free 空閑的內(nèi)存數(shù): 93M
- shared 當(dāng)前已經(jīng)廢棄不用,總是0
- buffers Buffer 緩存內(nèi)存數(shù): 298M
- cached Page 緩存內(nèi)存數(shù):14G
pidstat 命令
前面我們講解了pidstat命令,但是這里我們也用這個(gè)命令來查看內(nèi)存情況。
pidstat -p 進(jìn)程號 -r 采樣每隔秒數(shù)

字段說明
-
minflt/s: 每秒次缺頁錯誤次數(shù)(minor page faults),次缺頁錯誤次數(shù)意即虛擬內(nèi)存地址映射成物理內(nèi)存地址產(chǎn)生的page fault次數(shù) -
majflt/s: 每秒主缺頁錯誤次數(shù)(major page faults),當(dāng)虛擬內(nèi)存地址映射成物理內(nèi)存地址時(shí),相應(yīng)的page在swap中,這樣的page fault為major page fault,一般在內(nèi)存使用緊張時(shí)產(chǎn)生 -
VSZ: 該進(jìn)程使用的虛擬內(nèi)存(以kB為單位) -
RSS: 該進(jìn)程使用的物理內(nèi)存(以kB為單位) -
%MEM: 該進(jìn)程使用內(nèi)存的百分比 -
Command: 拉起進(jìn)程對應(yīng)的命令
硬盤
df 命令
參數(shù)
-
-a:--all,顯示所有的文件系統(tǒng),包括虛擬文件系統(tǒng),參考示例2。 -
-B:--block-size,指定單位大小。比如1k,1m等,參考示例3。 -
-h:--human-readable,以人們易讀的GB、MB、KB等格式顯示,參考示例4。 -
-H:--si,和-h參數(shù)一樣,但是不是以1024,而是1000,即1k=1000,而不是1k=1024。 -
-i:--inodes,不用硬盤容量,而是以inode的數(shù)量來顯示,參考示例5。 -
-k:以KB的容量顯示各文件系統(tǒng),相當(dāng)于--block-size=1k。 -
-m:以KB的容量顯示各文件系統(tǒng),相當(dāng)于--block-size=1m。 -
-l:--local,只顯示本地文件系統(tǒng)。 -
--no-sync:在統(tǒng)計(jì)使用信息之前不調(diào)用sync命令(默認(rèn))。 -
-sync:在統(tǒng)計(jì)使用信息之前調(diào)用sync命令。 -
-P:--portability,使用POSIX格式顯示,參考示例6。 -
-t:--type=TYPE,只顯示指定類型的文件系統(tǒng),參考示例7。 -
-T:--print-type,顯示文件系統(tǒng)類型,參考示例8。 -
-x:--exclude-type=TYPE,不顯示指定類型的文件系統(tǒng)。 -
--help:顯示幫助信息。 -
--version:顯示版本信息。
雖然有這么多的參數(shù),但是我們還是常用 df -h直接查看所有的磁盤信息。

字段說明
-
Filesystem:代表該文件系統(tǒng)時(shí)哪個(gè)分區(qū),所以列出的是設(shè)備名稱。
1K-blocks:說明下面的數(shù)字單位是1KB,可利用-h或-m來改變單位大小,也可以用-B來設(shè)置。 -
Used:已經(jīng)使用的空間大小。 -
Available:剩余的空間大小。 -
Use%:磁盤使用率。如果使用率在90%以上時(shí),就需要注意了,避免磁盤容量不足出現(xiàn)系統(tǒng)問題,尤其是對于文件內(nèi)容增加較快的情況(如/home、/var/spool/mail等)。 -
Mounted on:磁盤掛載的目錄,即該磁盤掛載到了哪個(gè)目錄下面。
磁盤I/O
iostat 命令
參數(shù)
-
-c: 僅顯示CPU統(tǒng)計(jì)信息.與-d選項(xiàng)互斥. -
-d: 僅顯示磁盤統(tǒng)計(jì)信息.與-c選項(xiàng)互斥. -
-k: 以K為單位顯示每秒的磁盤請求數(shù),默認(rèn)單位塊. -
-p: device | ALL
與-x選項(xiàng)互斥,用于顯示塊設(shè)備及系統(tǒng)分區(qū)的統(tǒng)計(jì)信息.也可以在-p后指定一個(gè)設(shè)備名. -
-t在輸出數(shù)據(jù)時(shí),打印搜集數(shù)據(jù)的時(shí)間. -
-V打印版本號和幫助信息. -
-x輸出擴(kuò)展信息.

字段說明
-
rrqm/s: 將讀入請求合并后,每秒發(fā)送到設(shè)備的讀入請求數(shù). -
wrqm/s: 將寫入請求合并后,每秒發(fā)送到設(shè)備的寫入請求數(shù). -
r/s: 每秒發(fā)送到設(shè)備的讀入請求數(shù). -
w/s: 每秒發(fā)送到設(shè)備的寫入請求數(shù). -
rsec/s: 每秒從設(shè)備讀入的扇區(qū)數(shù). -
wsec/s: 每秒向設(shè)備寫入的扇區(qū)數(shù). -
rkB/s: 每秒從設(shè)備讀入的數(shù)據(jù)量,單位為K. -
wkB/s: 每秒向設(shè)備寫入的數(shù)據(jù)量,單位為K. -
avgrq-sz: 發(fā)送到設(shè)備的請求的平均大小,單位是扇區(qū). -
avgqu-sz: 發(fā)送到設(shè)備的請求的平均隊(duì)列長度. -
await: I/O請求平均執(zhí)行時(shí)間.包括發(fā)送請求和執(zhí)行的時(shí)間.單位是毫秒. -
svctm: 發(fā)送到設(shè)備的I/O請求的平均執(zhí)行時(shí)間.單位是毫秒. -
%util: 在I/O請求發(fā)送到設(shè)備期間,占用CPU時(shí)間的百分比.用于顯示設(shè)備的帶寬利用率. 當(dāng)這個(gè)值接近100%時(shí),表示設(shè)備帶寬已經(jīng)占滿.
pidstat 命令
pidstat -d 采樣間隔時(shí)間 -p 進(jìn)程id

字段說明
-
PID:進(jìn)程id -
kB_rd/s:每秒從磁盤讀取的KB -
kB_wr/s:每秒寫入磁盤KB -
kB_ccwr/s:任務(wù)取消的寫入磁盤的KB。當(dāng)任務(wù)截?cái)嗯K的pagecache的時(shí)候會發(fā)生。 -
COMMAND:task的命令名
網(wǎng)絡(luò)I/O
ifstat 命令
參數(shù)
-
-l: 監(jiān)測環(huán)路網(wǎng)絡(luò)接口。缺省情況下ifstat監(jiān)測活動的所有非環(huán)路網(wǎng)絡(luò)接口 -
-a: 監(jiān)測能檢測到的所有網(wǎng)絡(luò)接口的狀態(tài)信息。 -
-z: 隱藏流量是無的接口,如接口啟動了但是未使用的。 -
-i: <interface> 指定要監(jiān)測的接口。 -
-s: 通過SNMP查詢一個(gè)遠(yuǎn)程主機(jī)。 -
-h: 顯示幫助信息 -
-n: 關(guān)閉周期性顯示頭部信息。 -
-t: 在每一行的開頭加一個(gè)時(shí)間戳 -
-T: 報(bào)告所有檢測接口的全部帶寬 -
-w: 指定間隔時(shí)間(與官方的文檔說明并不同,不知道是不是寫文檔的人寫錯,反正我測試后是間隔時(shí)間) -
-W: 如果顯示內(nèi)容超出終端窗口的寬度,就換行 -
-S: 在同一行更新顯示內(nèi)容 -
-b: 用kbits/s顯示帶寬 -
-q: 按鍵模式 -
-v: 顯示版本信息 -
-d: 指定一個(gè)驅(qū)動來收集狀態(tài)信息
每秒輸出一次網(wǎng)絡(luò)IO信息

其中的 eth0 為網(wǎng)卡。