linux 系統性能監控工具(1) vmstat與dstat命令詳解。

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性能問題有很大的幫助
  1. 運行隊列:
    每個CPU都會維護一個運行隊列,調度器會不斷地輪詢讓隊列中的進程運行,直到進程運行完畢將其由隊列中刪除。如果CPU過載,就會出現調度器跟不上系統要求,導致運行隊列中等待運行的進程越來越多。正常來說,每個CPU的運行隊列不要超過3,如果是雙核CPU 就不要超過6
  2. CPU使用率
  • 用戶進程(us):運行用戶進程所佔用的CPU時間的百分比。
  • 系統進程(sy):運行系統進程和中斷所佔用的CPU的時間百分比。
  • 等待IO(id):因爲IO等待而使CPU處於idle狀態的時間百分比。
  • 空閒(wa):CPU處於空閒狀態的時間百分比

如果CPU的空閒率長期低於10%,那麼表示CPU的資源已經非常緊張,應該考慮進程優化或添加更多地CPU。

“等待IO”表示CPU因等待, IO 資源而被迫處於空閒狀態,這時候的CPU並沒有處於運算狀態,而是被白白浪費了,所以“等待IO應該越小越好。

  1. 上下文切換

通過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

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