vmstat
功能 :展現給定時間間隔服務器狀態,包括cpu使用率,內存使用,虛擬內存交換情況,io讀寫情況
基礎用法
一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數。
[root@xiaoagiao bak]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1544676 2108 170872 0 0 41 4 44 133 0 0 99 0 0
[root@xiaoagiao bak]# vmstat 1 3 #一秒輸出一次,一共三次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1536356 2108 176904 0 0 13 2 35 87 0 0 100 0 0
0 0 0 1536356 2108 176904 0 0 0 2 35 73 0 0 100 0 0
0 0 0 1536356 2108 176904 0 0 0 0 41 77 0 1 99 0 0
[root@xiaoagiao bak]# vmstat 1 #每秒輸出一次,不停輸出,不退出
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1536356 2108 176904 0 0 13 2 35 86 0 0 100 0 0
0 0 0 1536356 2108 176904 0 0 0 0 42 79 0 0 100 0 0
0 0 0 1536356 2108 176904 0 0 0 0 27 56 0 0 100 0 0
……
字段含義
類別 | 項目 | 含義 | 說明 |
---|---|---|---|
Procs | r | 等待執行的任務數 | 展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。 |
B | 等待IO的進程數量 | ||
memory | swpd | 正在使用虛擬的內存大小,單位k | 大於0時,表示物理內存不足,需要考慮升級內存 |
free | 空閒內存大小 | 物理內存 | |
buff | 已用的buff大小,對塊設備的讀寫進行緩衝 | ||
cache | 已用的cache大小,文件系統的cache | ||
inact | 非活躍內存大小,即被標明可回收的內存,區別於free和active | (當使用-a選項時顯示) | |
active | 活躍的內存大小 | (當使用-a選項時顯示) | |
swap | si | 每秒從交換區寫入內存的大小(單位:kb/s) | 大於0時,物理類存不夠用了,查找消耗內存的進程幹掉 |
so | 每秒從內存寫到交換區的大小 | ||
IO | bi | 每秒讀取的塊數(讀磁盤) | 現在的Linux版本塊的大小爲1024bytes |
bo | 每秒寫入的塊數(寫磁盤) | ||
system | in | 每秒中斷數,包括時鐘中斷 | 這兩個值越大,會看到由內核消耗的cpu時間會越多 |
cs | 每秒上下文切換數 | ||
cpu | us | 用戶進程執行消耗cpu時間(user time) | us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期超過50%的使用,那麼我們就該考慮優化程序算法或其他措施了 |
sy | 系統進程執行消耗cpu時間(user time) | sys的值過高時,說明系統內核消耗的cpu資源多,這個不是良性的表現,我們應該檢查原因一般情況(us+sy不大於80%)。 | |
id | 空閒時間包括wa時間 | ||
wa | 等待io時間 | Wa過高時,說明io等待比較嚴重,這可能是由於磁盤大量隨機訪問造成的,也有可能是磁盤的帶寬出現瓶頸 |
選項
-a | 顯示活躍和非活躍內存 |
---|---|
-d | 顯示各個磁盤相關統計信息 |
-D | 顯示磁盤總體信息 |
-p | 顯示指定磁盤分區統計信息 |
-s | 顯示內存統計信息和多種系統活動數量 |
-t | 輸出信息時一併輸出時間 |
-S | 指定單位輸出。KkmM(1000,1024,1000000,1048576) |
- 舉例
[root@xiaoagiao bak]# vmstat -a #顯示活躍和非活躍內存inact,active
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 1536148 81892 107872 0 0 11 2 34 83 0 0 100 0 0
[root@xiaoagiao bak]# vmstat -d #顯示各個磁盤相關統計信息
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 4595 4 263060 58355 3924 278 54078 49410 0 46
sdb 288 0 23268 1195 0 0 0 0 0 0
sdc 115 0 5368 352 0 0 0 0 0 0
sdd 176 0 7472 407 0 0 0 0 0 0
sde 119 0 5400 309 0 0 0 0 0 0
sdf 135 0 7416 566 0 0 0 0 0 0
sr0 23 0 2076 191 0 0 0 0 0 0
md0 82 0 4160 0 0 0 0 0 0 0
[root@xiaoagiao bak]# vmstat -D #顯示磁盤總體信息
8 disks
12 partitions
5533 total reads
4 merged reads
318220 read sectors
61375 milli reading
3939 writes
278 merged writes
54228 written sectors
49442 milli writing
0 inprogress IO
46 milli spent IO
[root@xiaoagiao bak]# vmstat -p /dev/sda1 #顯示指定磁盤分區統計信息
sda1 reads read sectors writes requested writes
1143 47088 1031 4137
CPU的性能監控
- 主要關注3個指標:運行隊列、CPU使用率和上下文切換,理解這3個指標的概念和原理對於發現和處理CPU性能問題有很大的幫助
- 運行隊列:
每個CPU都會維護一個運行隊列,調度器會不斷地輪詢讓隊列中的進程運行,直到進程運行完畢將其由隊列中刪除。如果CPU過載,就會出現調度器跟不上系統要求,導致運行隊列中等待運行的進程越來越多。正常來說,每個CPU的運行隊列不要超過3,如果是雙核CPU 就不要超過6 - CPU使用率
- 用戶進程(us):運行用戶進程所佔用的CPU時間的百分比。
- 系統進程(sy):運行系統進程和中斷所佔用的CPU的時間百分比。
- 等待IO(id):因爲IO等待而使CPU處於idle狀態的時間百分比。
- 空閒(wa):CPU處於空閒狀態的時間百分比
如果CPU的空閒率長期低於10%,那麼表示CPU的資源已經非常緊張,應該考慮進程優化或添加更多地CPU。
“等待IO”表示CPU因等待, IO 資源而被迫處於空閒狀態,這時候的CPU並沒有處於運算狀態,而是被白白浪費了,所以“等待IO應該越小越好。
- 上下文切換
通過CPU時間輪詢的方法,Linux能夠支持多任務同時運行。對於普通的CPU,內核會調度和執行這些進程,每個進程都會被分配CPU時 間片並運行。當一個進程用完時間片或者被更高優先級的進程搶佔時間塊後,它會被轉到CPU的等待運行隊列中,同時讓其他進程在CPU上運行。這個進程切換的過程被稱爲上下文切換。過多的上下文切換會造成系統的很大的開銷
dstat
安裝軟件
yum install dstat -y
選項
-c,–cpu | 統計CPU狀態,包括 user, system, idle(空閒等待時間百分比), wait(等待磁盤IO), hardware interrupt(硬件中斷), software interrupt(軟件中斷)等 |
---|---|
-d, --disk | 統計磁盤讀寫狀態 |
-D total,sda | 統計指定磁盤或彙總信息 |
-l, --load | 統計系統負載情況,包括1分鐘、5分鐘、15分鐘平均值 |
-m, --mem | 統計系統物理內存使用情況,包括used, buffers, cache, free |
-s, --swap | 統計swap已使用和剩餘量 |
-n, --net | 統計網絡使用情況,包括接收和發送數據 |
-N eth1,total | 統計eth1接口彙總流量 |
-r, --io | 統計I/O請求,包括讀寫請求 |
-p, --proc | 統計進程信息,包括runnable、uninterruptible、new |
-y, --sys | 統計系統信息,包括中斷、上下文切換 |
-t | 顯示統計時時間,對分析歷史數據非常有用 |
–fs | 統計文件打開數和inodes數 |
-g | 顯示頁面使用情況。 |
直接查看
- 執行 dstat 命令的時候,默認他會 收集-cpu-、-disk-、-net-、-paging-、-system-的數據,一秒鐘收集一次
[root@xiaoagiao ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 99 0 0 0| 21k 13k| 0 0 | 0 0 | 37 90
0 0 100 0 0 0| 0 0 | 60B 242B| 0 0 | 32 70
1 0 99 0 0 0| 0 0 | 60B 114B| 0 0 | 34 66
0 0 100 0 0 0| 0 0 | 60B 106B| 0 0 | 25 56
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 38 69
0 1 99 0 0 0| 0 0 | 60B 98B| 0 0 | 30 62
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 32 60
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 26 57
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 36 67
0 0 100 0 0 0| 0 0 | 60B 98B| 0 0 | 25 58
0 0 100 0 0 0| 0 0 | 60B 90B| 0 0 | 35 65
0 1 99 0 0 0| 0 2048B| 120B 98B| 0 0 | 49 239
0 0 100 0 0 0| 0 0 | 300B 264B| 0 0 | 42 70
0 0 100 0 0 0| 0 0 | 210B 158B| 0 0 | 36 71
0 1 99 0 0 0| 0 0 | 120B 98B| 0 0 | 36 70
0 0 100 0 0 0| 0 0 | 120B 98B| 0 0 | 26 57 ^C
可以指定高輸出次數和間隔時間
dstat 1 5 :每隔一秒採集一次,一共輸出5次。
查看cpu的使用情況(實時顯示)
- dstat -c
[root@xiaoagiao ~]# dstat -c
----total-cpu-usage----
usr sys idl wai hiq siq
0 0 99 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 1 99 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 0 100 0 0 0
0 1 99 0 0 0
- 關於cpu資源消耗數據
[root@xiaoagiao ~]# dstat -c -y -l --proc-count --top-cpu
----total-cpu-usage---- ---system-- ---load-avg--- proc -most-expensive-
usr sys idl wai hiq siq| int csw | 1m 5m 15m |tota| cpu process
0 0 100 0 0 0| 36 85 | 0 0.01 0.05| 97|vmtoolsd 0.1
0 0 100 0 0 0| 31 67 |0.08 0.03 0.05| 97|python2 1.0
0 0 100 0 0 0| 34 70 |0.08 0.03 0.05| 97|vmtoolsd 1.0
0 1 99 0 0 0| 33 64 |0.08 0.03 0.05| 97|
0 0 100 0 0 0| 35 70 |0.08 0.03 0.05| 97|
0 0 100 0 0 0| 33 68 |0.08 0.03 0.05| 97|
0 0 100 0 0 0| 34 70 |0.08 0.03 0.05| 97| ^C
實時查看磁盤讀寫數據大小
- dstat -d
[root@xiaoagiao ~]# dstat -d
-dsk/total-
read writ
21k 13k
0 0
0 0
0 0
0 0
0 20k
0 0
0 0
0 0 ^C
查看內存使用情況
- dstat -m
[root@xiaoagiao ~]# dstat -m 1 4
------memory-usage-----
used buff cach free
226M 2416k 366M 1225M
226M 2416k 366M 1225M
226M 2416k 366M 1225M
226M 2416k 366M 1225M
226M 2416k 366M 1225M
- 查看所有內存都有誰在使用
[root@xiaoagiao ~]# dstat -g -l -m -s --top-mem
---paging-- ---load-avg--- ------memory-usage----- ----swap--- --most-expensive-
in out | 1m 5m 15m | used buff cach free| used free| memory process
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M
0 0 | 0 0.02 0.05| 223M 2416k 366M 1228M| 0 2048M|firewalld 28.0M^C
查看io操作情況
- dstat -r
[root@xiaoagiao ~]# dstat -r 1 4
--io/total-
read writ
0.64 0.58
0 0
0 0
0 0
找出佔用資源最高的進程和用戶
- 查看當前佔用I/O、cpu、內存等最高的進程信息可以使用dstat --top-mem --top-io --top-cpu
[root@xiaoagiao ~]# dstat --top-mem --top-cpu --top-io
--most-expensive- -most-expensive- ----most-expensive----
memory process | cpu process | i/o process
firewalld 28.0M|vmtoolsd 0.1|systemd 48k 33k
firewalld 28.0M| |sshd: root@ 388B 164B
firewalld 28.0M|vmtoolsd 1.0|vmtoolsd 7517B 0
firewalld 28.0M| |sshd: root@ 155B 52B
firewalld 28.0M|python2 1.0|sshd: root@ 155B 44B
firewalld 28.0M| |vmtoolsd 9448B 0
firewalld 28.0M| |sshd: root@ 148B 44B
firewalld 28.0M| |sshd: root@ 155B 36B
firewalld 28.0M| |sshd: root@ 155B 36B^C