性能監控 | Linux監控--CPU、內存、I/O


Linux監控--CPU、內存、I/O

CPU

top命令能夠實時監控系統的運行狀態,並且可以按照CPU、內存和執行時間進行排序,同時top命令還可以通過交互式命令進行設定顯示,通過top命令可以查看即時活躍的進行。

 

內存

free命令可以查看當前系統內存的使用情況
free -m以MB為單位顯示系統內存的使用情況,同理,也可以使用-k、-g等其他的單位顯示

free -m

 

磁盤I/O

磁盤的讀寫能力

iostat -x -m 1

1)指定采樣時間間隔與采樣次數

與sar命令一樣,我們可以以”iostat interval [count] ”形式指定iostat命令的采樣間隔和采樣次數:

[patrickxu@vm1 ~]$ iostat -d 2 3
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1)   06/12/2017  _x86_64_    (8 CPU)

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 0.45 0.29 8.10 6634946 183051408
vdb 0.12 3.11 30.55 70342034 689955328

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 0.00 0.00 0.00 0 0
vdb 0.00 0.00 0.00 0 0

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
vda 1.50 0.00 12.00 0 24
vdb 0.00 0.00 0.00 0 0


以上命令輸出Device的信息,采樣時間為1秒,采樣2次,若不指定采樣次數,則iostat會一直輸出采樣信息,直到按”ctrl+c”退出命令。注意,第1次采樣信息與單獨執行iostat的效果一樣,為從系統開機到當前執行時刻的統計信息。


2)以kB為單位顯示讀寫信息(-k選項)/以mB為單位顯示讀寫信息(-m選項)

我們可以使用-k選項,指定iostat的部分輸出結果以kB為單位,而不是以扇區數為單位:



[patrickxu@vm1 ~]$ iostat -d -k
Linux 2.6.32-279.19.3.el6.ucloud.x86_64 (vm1) 06/12/2017 x86_64 (8 CPU)

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
vda 0.45 0.15 4.05 3317473 91525980
vdb 0.12 1.56 15.27 35171017 344977664


以上輸出中,kB_read/s、kB_wrtn/s、kB_read和kB_wrtn的值均以kB為單位,相比以扇區數為單位,這里的值為原值的一半(1kB=512bytes*2)


3)更詳細的io統計信息(-x選項)

為顯示更詳細的io設備統計信息,我們可以使用-x選項,在分析io瓶頸時,一般都會開啟-x選項:



linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12

……
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60


以上各列的含義如下:























































選項 說明
rrqm/s 每秒對該設備的讀請求被合並次數,文件系統會對讀取同塊(block)的請求進行合並
wrqm/s 每秒對該設備的寫請求被合並次數
r/s 每秒完成的讀次數
w/s 每秒完成的寫次數
rkB/s 每秒讀數據量(kB為單位)
wkB/s 每秒寫數據量(kB為單位)
avgrq-sz 平均每次IO操作的數據量(扇區數為單位)
avgqu-sz 平均等待處理的IO請求隊列長度
await 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒為單位)
svctm 平均每次IO請求的處理時間(毫秒為單位)
%util 采用周期內用於IO操作的時間比率,即IO隊列非空的時間比率

對於以上示例輸出,我們可以獲取到以下信息:
- 每秒向磁盤上寫30M左右數據(wkB/s值)
- 每秒有91次IO操作(r/s+w/s),其中以寫操作為主體
- 平均每次IO請求等待時間為120.57毫秒,處理時間為6.33毫秒
- 等待處理的IO請求隊列中,平均有11.79個請求駐留


實際查看時,一般結合着多個選項查看: 如iostat -dxm 3



[root@yg-uhost724 ~]# iostat -dxm 5
Linux 2.6.32-279.19.16.el6.ucloud.x86_64 (yg-uhost724) 06/12/2017 x86_64 (24 CPU)

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.69 29.89 1.36 21.52 0.05 0.20 23.04 0.04 1.96 0.29 0.67
sdb 682.88 1811.86 77.94 417.73 2.97 8.71 48.27 0.01 0.03 0.10 4.89
dm-14 0.00 0.00 0.03 41.47 0.00 0.16 8.00 0.01 0.12 0.02 0.10
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 7.24 0.07 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 0.07 0.04 0.00
dm-3 0.00 0.00 0.00 0.98 0.00 0.00 8.00 0.00 3.57 0.22 0.02
dm-5 0.00 0.00 0.18 50.51 0.00 0.20 8.00 0.03 0.44 0.01 0.07
dm-1 0.00 0.00 1.50 5.51 0.01 0.02 8.00 0.03 4.04 0.04 0.03
dm-6 0.00 0.00 123.23 1042.56 0.48 4.07 8.00 0.01 0.01 0.02 1.90
dm-4 0.00 0.00 635.74 1069.59 2.48 4.18 8.00 0.00 0.04 0.01 2.39
sdc 7.23 106.32 0.52 0.94 0.03 0.42 627.54 0.02 13.32 17.58 2.58

Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 15.00 0.40 17.80 0.00 0.10 10.90 0.00 0.10 0.10 0.18
sdb 82.60 11967.00 414.60 2500.20 1.94 56.51 41.07 12.07 4.14 0.07 21.02
dm-14 0.00 0.00 0.00 0.20 0.00 0.00 8.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-3 0.00 0.00 0.00 1.80 0.00 0.01 8.00 0.00 0.11 0.11 0.02
dm-5 0.00 0.00 0.00 2.00 0.00 0.01 8.00 0.00 0.00 0.00 0.00
dm-1 0.00 0.00 0.00 2.40 0.00 0.01 8.00 0.01 4.17 1.25 0.30
dm-6 0.00 0.00 0.00 45.20 0.00 0.18 8.00 0.11 2.45 0.55 2.48
dm-4 0.00 0.00 497.20 14415.80 1.94 56.31 8.00 72.87 4.83 0.01 19.14
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0


說明:



rrqm/s:每秒進行 merge 的讀操作數目.即 delta(rmerge)/s


wrqm/s:每秒進行 merge 的寫操作數目.即 delta(wmerge)/s


%util: 一秒中有百分之多少的時間用於 I/O


如果%util接近100%,說明產生的I/O請求太多,I/O系統已經滿負荷


idle小於70% IO壓力就較大了,一般讀取速度有較多的wait。



查看cpu狀態


iostat -c 1 1

image


磁盤的容量


df可以查看當前系統磁盤空間的使用情況


df -h




綜合監控工具(含網絡)--vmstat


vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。這個命令是我查看Linux/Unix最喜愛的命令,一個是Linux/Unix都支持,二是相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。


一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數,如:



root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0


2表示每個兩秒采集一次服務器狀態,1表示只采集一次。


實際上,在應用過程中,我們會在一段時間內一直監控,不想監控直接結束vmstat就行了,例如:



root@ubuntu:~# vmstat 2  
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0
0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0
0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0
1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0


字段含義說明:









































































































類別 項目 含義 說明
Procs(進程) r 等待執行的任務數 展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。
B 等待IO的進程數量
Memory(內存) swpd 正在使用虛擬的內存大小,單位k
free 空閑內存大小
buff 已用的buff大小,對塊設備的讀寫進行緩沖 Buffer:緩沖區,用於存儲速度不同步的設備或優先級不同的設備之間傳輸數據;通過buffer可以減少進程間通信需要等待的時間,當存儲速度快的設備與存儲速度慢的設備進行通信時,存儲慢的數據先把數據存放到buffer,達到一定程度存儲快的設備再讀取buffer的數據,在此期間存儲快的設備CPU可以干其他的事情。
Buffer:一般是用在寫入磁盤的,例如:某個進程要求多個字段被讀入,當所有要求的字段被讀入之前已經讀入的字段會先放到buffer中。
cache 已用的cache大小,文件系統的cache Cache(片上緩存),這個Cache速度比內存快,從Cache取指令不需要等待。
當CPU要讀內存的指令的時候先讀Cache再讀內存,但一開始Cache是空着的,只能從內存取,這時候的確是很慢,CPU需要等待。
但從內存取回的不僅僅是CPU所需要的指令,還有其它的、當前不需要的指令,然后把這些指令存在Cache里備用。
CPU再取指令的時候還是先讀Cache,看看里面有沒有所需指令,如果碰巧有就直接從Cache取,不用等待即可返回(命中),這就解放了CPU,提高了效率。(當然不會是100%命中,因為Cache的容量比內存小)
inact 非活躍內存大小,即被標明可回收的內存,區別於free和active 具體含義見:概念補充(當使用-a選項時顯示)
active 活躍的內存大小 具體含義見:概念補充(當使用-a選項時顯示)
Swap si 每秒從交換區寫入內存的大小(單位:kb/s)
so 每秒從內存寫到交換區的大小
IO bi 每秒讀取的塊數(讀磁盤) 塊設備每秒接收的塊數量,單位是block,這里的塊設備是指系統上所有的磁盤和其他塊設備,現在的Linux版本塊的大小為1024bytes
bo 每秒寫入的塊數(寫磁盤) 塊設備每秒發送的塊數量,單位是block
system in 每秒中斷數,包括時鍾中斷 這兩個值越大,會看到由內核消耗的cpu時間sy會越多秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目
cs 每秒上下文切換數
CPU(以百分比表示) us 用戶進程執行消耗cpu時間(user time) us的值比較高時,說明用戶進程消耗的cpu時間多,但是如果長期超過50%的使用,那么我們就該考慮優化程序算法或其他措施了
sy 系統進程消耗cpu時間(system time) sys的值過高時,說明系統內核消耗的cpu資源多,這個不是良性的表現,我們應該檢查原因。這里us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足
Id 空閑時間(包括IO等待時間) 一般來說 us+sy+id=100
wa 等待IO時間 wa過高時,說明io等待比較嚴重,這可能是由於磁盤大量隨機訪問造成的,也有可能是磁盤的帶寬出現瓶頸。


超級監控工具--dstat


dstat需要先進行安裝
yum install -y dstat


命令:dstat -clmnsygdr



 





============================== 華麗分割線 =


> > > 微信公眾號:全棧測試筆記


> > > Q群:652122175


> > > 更多測試干貨:
https://www.cnblogs.com/uncleyong/p/10530261.html




==== END ================================




















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM