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 689955328Device: 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
磁盤的容量
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 ================================
刷新評論
刷新頁面
返回頂部
發表評論
昵稱:
評論內容:
退出 訂閱評論
[Ctrl+Enter快捷鍵提交]
相關博文:
·
linux操作系統級別監控iostat命令
·
CentOS查看CPU、內存、網絡流量和磁盤 I/O【詳細】
·
性能測試三十:監控之命令監控
·
CentOS查看CPU、內存、網絡流量和磁盤 I/O【詳細】
·
CentOS查看CPU、內存、網絡流量和磁盤 I/O
»
更多推薦...