一、glances:基于C/S架構的資源管理工具
glances介紹:
top 指令是 Linux 下的一個實時任務管理器, 同時也是用于在 GNU/Linux 發行版中尋找系統性能方面的瓶頸,并幫助我們作出正确操作的常用系統監視工具。 她有着一個極為簡潔的界面,并自帶少量的可以幫助我們快速了解系統性能的實用選項。但是,有些時候想要通過她尋找一個占用系統資源比較大的應用或程序可能會比較困難。 因為 top 指令本身并不會幫助我們高亮那些吃太多 CPU,記憶體,或者其他資源的程式。
Glances 是一個由 Python 編寫,使用 psutil 庫來從系統抓取資訊的基于 curses 開發的跨平台指令行系統監視工具。 通過 Glances,我們可以監視 CPU,平均負載,記憶體,網絡流量,磁盤 I/O,其他處理器 和 檔案系統 空間的利用情況。Glances 是一個用來監視 GNU/Linux 和 FreeBSD 作業系統的 GPL 授權的自由軟體。Glances 同時也提供了很多實用的選項。 其中我們能夠在配置檔案見到的一項主要的功能就是設定關鍵值及相應的标簽 (careful[小心], warning[警告] 和 critical[嚴重]), 然後她會自動幫我們用不同顔色标出系統達到某個瓶頸的資訊。
Glances 主要功能
• CPU 資訊 (使用者的相關應用, 系統核心程式和空閑程式)
• 總記憶體資訊,包括了實體記憶體,交換空間和空閑記憶體等等
• 之前的 1 分鐘、5 分鐘和 15 分鐘平均的 CPU 負載
• 網絡連結的下行和上行速度
• 處理器總數,以及其活動狀态
• 硬碟 I/O 相關(讀寫)速度詳情
• 目前挂載裝置的磁盤使用情況
• 高 CPU 和記憶體使用的程序名,和相關應用的位置
• 在底部顯示目前日期和時間
• 将消耗最高系統資源的程序用紅色标出
安裝:yum install -y glances或者源碼安裝
指令格式:
glances 選項
glances 進入頁面後按子指令實作相關功能
常用選項:
-b # 以Byte為機關來顯示網卡統計資料
-d # 關閉磁盤I/O同統計資料的顯示
-f /檔案位置 # 将顯示的統計資料存儲在指定檔案
-o {HTMI|CSV} # 指定顯示輸出格式
-n # 不顯示網絡統計資料
-m # 不顯示mount加載的檔案系統
-1 # 每個CPU統計資料單獨顯示
-t n # 指定glances重新整理頻,預設1s
(選項功能也能通過子指令實作)
常用子指令:
a # 自動排序 b # 以Byte為機關來顯示網卡統計資料
c # 按CPU%排序 l # 顯示/隐藏警報日志
m # 按MEM%排序 w # 删除報警
u # 按照使用者排序 x # 删除警告和緊急警報
p # 按照程序名排序 1 # 全局CPU或每個CPU的統計資訊
i # 按照IO速率排序 I # 顯示/隐藏IP子產品
t # 按照時間排序 D # 啟用/禁用Docker統計資料
d # 顯示/隐藏磁盤I/O狀态 T # 以組合檢視網絡I/O
f # 顯示/隐藏檔案系統統計資料 U # 檢視累計網絡I/O
n # 顯示/隐藏網絡統計資料 F # 顯示檔案系統空閑空間
s # 顯示/隐藏傳感器資料 g # 生成目前曆史記錄的圖形
2 # 顯示/隐藏側邊欄 r # 重置曆史
z # 啟用/禁用流程資料 h # 顯示/隐藏幫助螢幕
3 # 啟用/禁用快速浏覽插件 q # 退出 (Esc and Ctrl-C also work)
e # 啟用/禁用頂部擴充狀态
/ # 啟用/禁用短程序名
0 # 啟用/禁用Irix程序CPU
Glances 中高亮顔色的含義
Glances 會用一下幾種顔色來代表狀态:
- 綠色:OK(一切正常)
- 藍色:CAREFUL(需要注意)
- 紫色:WARNING(警告)
- 紅色:CRITICAL(嚴重)
高亮警告閥值可以在配置檔案中設定:
一般閥值被預設設定為(careful=50、warning=70、critical=90)。
我們可以按照自己的需求在配置檔案(預設在 /etc/glances/glances.conf)中自定義。
遠端使用glances:
C/S指令格式:
服務端運作glances:
glances -s -B 本機IP -p port -P
-s # 運作為服務端glances
-B # 綁定服務位址
-p # 服務端端口
-P # 密碼
用戶端連結glances,檢視服務端性能資料:
glances -c 服務端IP
C/S遠端使用示例:
服務端運作glances:
[[email protected] ~]# glances -s -B 0.0.0.0 -p 80
Glances server is running on 0.0.0.0:80
用戶端連結服務端檢視:
[[email protected] ~]# glances -c 127.0.0.1 -p 80

二、sar(System ActivityReporter系統活動情況報告)是目前Linux上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告
安裝sar:yum install -y sysstat
指令格式:sar 選項 n m # n為重新整理間隔,m為重新整理次數
常用選項:
-A # 所有報告的總和
-a # 檔案讀寫情況
-b # 顯示I/O和傳遞速率的統計資訊
-B # 顯示換頁狀态
-d # 輸出每一塊磁盤的使用資訊
-e # 設定顯示報告的結束時間
-f # 從制定的檔案讀取報告
-i # 設定狀态資訊重新整理的間隔時間
-P # 報告每個CPU的狀态
-R # 顯示記憶體狀态
-u # 輸出cpu使用情況和統計資訊
-v # 顯示索引節點、檔案和其他核心表的狀态
-w # 顯示交換分區的狀态
-x # 顯示給定程序的裝
-r # 報告記憶體使用率的統計資訊
-c # 輸出程序統計資訊,每秒建立的程序數
使用示例:
(1、CPU資源監控
每10秒采樣一次,連續采樣3次,觀察CPU 的使用情況,并将采樣結果以二進制形式存入cpu_info中,如果要檢視二進制檔案test中的内容,需鍵入如下sar指令:sar -u -f test
[[email protected] ~]# sar -u -o /root/cpu_info 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:11:26 PM CPU %user %nice %system %iowait %steal %idle
11:11:36 PM all 0.18 0.00 0.08 0.00 0.00 99.75
11:11:46 PM all 0.23 0.00 0.08 0.00 0.00 99.70
11:11:56 PM all 0.23 0.00 0.08 0.03 0.00 99.67
Average: all 0.21 0.00 0.08 0.01 0.00 99.71
輸出項說明:
CPU:all 表示統計資訊為所有 CPU 的平均值。
%user:顯示在使用者級别(application)運作使用 CPU 總時間的百分比。
%nice:顯示在使用者級别,用于nice操作,所占用 CPU 總時間的百分比。
%system:在核心級别(kernel)運作所使用 CPU 總時間的百分比。
%iowait:顯示用于等待I/O操作占用 CPU 總時間的百分比。
%steal:管理程式(hypervisor)為另一個虛拟程序提供服務而等待虛拟 CPU 的百分比。
%idle:顯示 CPU 空閑時間占用 CPU 總時間的百分比。
輸出資料分析:
若 %iowait 的值過高,表示硬碟存在I/O瓶頸
若 %idle 的值高但系統響應慢時,有可能是 CPU 等待配置設定記憶體,此時應加大記憶體容量
若 %idle 的值持續低于1,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU 。
(2、 inode、檔案和其他核心表監控
每10秒采樣一次,連續采樣3次,觀察核心表的狀态
[[email protected] ~]# sar -v 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:17:21 PM dentunusd file-nr inode-nr pty-nr
11:17:31 PM 34449 1664 39389 3
11:17:41 PM 34449 1664 39389 3
11:17:51 PM 34449 1664 39389 3
Average: 34449 1664 39389 3
輸出項說明:
dentunusd:目錄高速緩存中未被使用的條目數量
file-nr:檔案句柄(file handle)的使用數量
inode-nr:索引節點句柄(inode handle)的使用數量
pty-nr:使用的pty數量
(3、記憶體和交換空間監控
每5秒采樣一次,連續采樣3次,監控記憶體分頁:
[[email protected] ~]# sar -r 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:19:17 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
11:19:22 PM 1086732 778576 41.74 2116 473184 315136 7.95 388136 194260 0
11:19:27 PM 1086732 778576 41.74 2116 473184 315136 7.95 388136 194260 0
11:19:32 PM 1086732 778576 41.74 2116 473184 315136 7.95 388156 194260 0
Average: 1086732 778576 41.74 2116 473184 315136 7.95 388143 194260 0
輸出項說明:
kbmemfree:空閑記憶體 ,不包括buffer和cache的空間.
kbmemused:已用記憶體,包括buffer和cache的空間.
%memused:kbmemused和記憶體總量(不包括swap)的一個百分比.
kbbuffers和kbcached:buffer和cache.
kbcommit:為了確定目前系統不溢出而需要的記憶體(RAM+swap).
%commit:kbcommit與記憶體總量(包括swap)的一個百分比.
(4. 記憶體分頁監控
每5秒采樣一次,連續采樣3次,監控記憶體分頁:
[[email protected] ~]# sar -B 10 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:23:39 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
11:23:49 PM 0.00 0.10 4.20 0.00 7.59 0.00 0.00 0.00 0.00
11:23:59 PM 0.00 0.00 3.30 0.00 4.10 0.00 0.00 0.00 0.00
11:24:09 PM 0.00 0.00 2.50 0.00 4.80 0.00 0.00 0.00 0.00
Average: 0.00 0.03 3.33 0.00 5.50 0.00 0.00 0.00 0.00
輸出項說明:
pgpgin/s:每秒從磁盤或SWAP置換到記憶體的位元組數(KB)
pgpgout/s:每秒從記憶體置換到磁盤或SWAP的位元組數(KB)
fault/s:每秒系統産生的缺頁數,即主缺頁與次缺頁之和(major + minor)
majflt/s:每秒鐘産生的主缺頁數.
pgfree/s:每秒被放入空閑隊列中的頁個數
pgscank/s:每秒被kswapd掃描的頁個數
pgscand/s:每秒直接被掃描的頁個數
pgsteal/s:每秒鐘從cache中被清除來滿足記憶體需要的頁個數
%vmeff:每秒清除的頁(pgsteal)占總掃描頁(pgscank+pgscand)的百分比
(5、 I/O和傳送速率監控
每3秒采樣一次,連續采樣3次,報告緩沖區的使用情況,需鍵入如下指令:
[[email protected] ~]# sar -b 3 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:25:14 PM tps rtps wtps bread/s bwrtn/s
11:25:17 PM 0.00 0.00 0.00 0.00 0.00
11:25:20 PM 0.00 0.00 0.00 0.00 0.00
11:25:23 PM 0.00 0.00 0.00 0.00 0.00
Average: 0.00 0.00 0.00 0.00 0.00
輸出項說明:
tps:每秒鐘實體裝置的 I/O 傳輸總量
rtps:每秒鐘從實體裝置讀入的資料總量
wtps:每秒鐘向實體裝置寫入的資料總量
bread/s:每秒鐘從實體裝置讀入的資料量,機關為 塊/s
bwrtn/s:每秒鐘向實體裝置寫入的資料量,機關為 塊/s
(6. 程序隊列長度和平均負載狀态監控
每5秒采樣一次,連續采樣3次,監控程序隊列長度和平均負載狀态:
[[email protected] ~]# sar -q 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:26:12 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
11:26:17 PM 0 153 0.00 0.01 0.05 0
11:26:22 PM 0 153 0.00 0.01 0.05 0
11:26:27 PM 2 153 0.00 0.01 0.05 0
Average: 1 153 0.00 0.01 0.05 0
輸出項說明:
runq-sz:運作隊列的長度(等待運作的程序數)
plist-sz:程序清單中程序(processes)和線程(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載
(7. 系統交換活動資訊監控
[[email protected] ~]# sar -W 5 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:26:56 PM pswpin/s pswpout/s
11:27:01 PM 0.00 0.00
11:27:06 PM 0.00 0.00
11:27:11 PM 0.00 0.00
Average: 0.00 0.00
輸出項說明:
pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量
(8. 裝置使用情況監控
每5秒采樣一次,連續采樣3次,報告裝置使用情況:
[[email protected] ~]# sar -d 5 3 -p
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/05/2020 _x86_64_ (4 CPU)
11:28:19 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:24 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:24 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:29 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:29 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
11:28:34 PM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:28:34 PM centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
Average: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sr0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: centos-swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
參數-p可以列印出sda,hdc等磁盤裝置名稱,如果不用參數-p,裝置節點則有可能是dev8-0,dev22-0
輸出項說明:
tps:每秒從實體磁盤I/O的次數.
rd_sec/s:每秒讀扇區的次數.
wr_sec/s:每秒寫扇區的次數.
avgrq-sz:平均每次裝置I/O操作的資料大小(扇區).
avgqu-sz:磁盤請求隊列的平均長度.
await:從請求磁盤操作到系統完成處理,每次請求的平均消耗時間
包括請求隊列等待時間,機關是毫秒(1秒=1000毫秒).
svctm:系統處理每次請求的平均時間,不包括在請求隊列中消耗的時間.
%util:I/O請求占CPU的百分比,比率越大,說明越飽和.
分析:
avgqu-sz 的值較低時,裝置的使用率較高。
當%util的值接近 1% 時,表示裝置帶寬已經占滿。
(9、要判斷系統瓶頸問題,有時需幾個 sar 指令選項結合起來
懷疑CPU存在瓶頸,可用 sar -u 和 sar -q 等來檢視
懷疑記憶體存在瓶頸,可用 sar -B、sar -r 和 sar -W 等來檢視
懷疑I/O存在瓶頸,可用 sar -b、sar -u 和 sar -d 等來檢視
三、vmstat:swap互動記憶體檢視工具
vmstat n m # 檢視記憶體運作情況(n:重新整理間隔時間;m:重新整理次數)
vmstat 選項:
-a:顯示活動内頁;
-f:顯示啟動後建立的程序總數;
-m:顯示slab資訊;
-n:頭資訊僅顯示一次;
-s:以表格方式顯示事件計數器和記憶體狀态;
-d:報告磁盤狀态;
-p:顯示指定的硬碟分區狀态;
-S:輸出資訊的機關。
示例:
[[email protected] ~]# vmstat 2 5
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 3100208 2600 594752 0 0 1 2 7 10 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 33 45 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 18 20 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 22 26 0 0 100 0 0
0 0 0 3100316 2600 594752 0 0 0 0 18 20 0 0 100 0 0
顯示參數說明:
Procs(程序)
r: 運作隊列中程序數量,這個值也可以判斷是否需要增加CPU。(長期大于1)
b: 等待IO的程序數量。
Memory(記憶體)
swpd: 使用虛拟記憶體大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能。
free: 空閑實體記憶體大小。
buff: 用作緩沖的記憶體大小。
cache: 用作緩存的記憶體大小,如果cache的值大的時候,說明cache處的檔案數多,如果頻繁通路到的檔案都能被cache處,那麼磁盤的讀IO bi會非常小。
Swap
si: 每秒從交換區寫到記憶體的大小,由磁盤調入記憶體。
so: 每秒寫入交換區的記憶體大小,由記憶體調入磁盤。
注意:記憶體夠用的時候,這2個值都是0,如果這2個值長期大于0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閑記憶體(free)很少的或接近于0時,就認為記憶體不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。
IO(現在的Linux版本塊的大小為1kb)
bi: 每秒讀取的塊數
bo: 每秒寫入的塊數
注意:随機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。
system(系統)
in: 每秒中斷數,包括時鐘中斷。
cs: 每秒上下文切換數。
注意:上面2個值越大,會看到由核心消耗的CPU時間會越大。
CPU(以百分比表示)
us: 使用者程序執行時間百分比(user time)
us的值比較高時,說明使用者程序消耗的CPU時間多,
但是如果長期超50%的使用,那麼我們就該考慮優化程式算法或者進行加速。
sy: 核心系統程序執行時間百分比(system time)
sy的值高時,說明系統核心消耗的CPU資源多
這并不是良性表現,我們應該檢查原因。
wa: IO等待時間百分比
wa的值高時,說明IO等待比較嚴重
這可能由于磁盤大量作随機通路造成,也有可能磁盤出現瓶頸(塊操作)。
id: 空閑時間百分比
四、dstat
dstat介紹:
dstat指令是一個用來替換vmstat、iostat、netstat、nfsstat和ifstat這些指令的工具,是一個全能系統資訊統計工具。與sysstat相比,dstat擁有一個彩色的界面,在手動觀察性能狀況時,資料比較顯眼容易觀察;而且dstat支援即時重新整理,譬如輸入dstat 3即每三秒收集一次,但最新的資料都會每秒重新整理顯示。和sysstat相同的是,dstat也可以收集指定的性能資源,譬如dstat -c即顯示CPU的使用情況。
dstat非常強大,可以實時的監控cpu、磁盤、網絡、IO、記憶體等使用情況。
直接使用dstat,預設使用的是-cdngy參數,分别顯示cpu、disk、net、page、system資訊,預設是1s顯示一條資訊。可以在最後指定顯示一條資訊的時間間隔,如dstat 5是沒5s顯示一條,dstat 5 10表示沒5s顯示一條,一共顯示10條。
安裝:
yum install -y dstat
格式:dstat 選項 重新整理時間
常用選項:
-c # 單獨顯示CPU相關資訊
-C total,cpu編号 # 分列顯示所有CPU及指CPU相關資訊
-d # 單獨顯示磁盤讀寫速率
-D total,磁盤編号 # 分列顯示所有磁盤相關資訊及位址磁盤資訊
-n # 單獨顯示網絡收發速率
-N total,網卡編号 # 分列顯示所有網及指定網卡的相關資訊
-g # 顯示page相關資料
-i # 顯示中斷的統計資料
-l #顯示機關時間内的負載情況
-m # 顯示記憶體統計資訊 (used、buffer、cache、free)
-p #顯示程序統計資訊
-r #顯示I/O統計資料
-s # 顯示交換空間統計資料
--tcp #顯示tcp統計資訊
--udp # 顯示udp統計資訊
-t # 顯示目前時間輸出
--aio # 顯示異步I/O統計資料
--fs # 顯示檔案系統統計資料
--ipc # 顯示ipc程序間通信統計資料
--lock # 顯示檔案鎖資訊
--socket # 顯示socket統計資料
--top-{cpu|int|io|mem|lantency|...} 顯示最占用cpu、中斷、I/O記憶體、延遲最大的程序
示例:
[[email protected] tsar-master]# 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 100 0 0 0|6335B 8621B| 0 0 | 0 0 | 73 57
0 0 100 0 0 0| 0 0 | 60B 890B| 0 0 | 84 69
0 0 100 0 0 0| 0 0 | 60B 362B| 0 0 | 80 64
1 0 99 0 0 0| 0 0 | 60B 362B| 0 0 | 108 71
0 0 100 0 0 0| 0 0 | 166B 422B| 0 0 | 75 63
0 0 100 0 0 0| 0 0 | 60B 362B| 0 0 | 75 61
輸出說明:
hiq # cpu硬中斷次數
siq # cpu軟中斷次數。
int # 系統中斷次數
csw # 上下文切換次數、
五、iostat
Linux系統中的 iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具将對系統的磁盤操作活動進行監視。它的特點是彙報磁盤活動統計情況,同時也會彙報出CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個程序進行深入分析,僅對系統的整體情況進行分析
安裝:yum install -y sysstat
指令格式:iostat 選項 m n # m重新整理資料、n重新整理次數
常用選項:
- -C # 顯示CPU使用情況
- -d # 顯示磁盤使用情況
- -k # 以 KB 為機關顯示
- -m # 以 M 為機關顯示
- -N # 顯示磁盤陣列(LVM) 資訊
- -n # 顯示NFS 使用情況
- -p 指定磁盤 # 顯示磁盤和分區的情況
- -t # 顯示終端和CPU的資訊
- -x # 顯示詳細資訊
- -V # 顯示版本資訊
示例1:
[[email protected] tsar-master]# iostat -dxm 1 2
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.09 0.19 0.29 0.01 0.01 60.86 0.00 8.06 1.28 12.46 1.51 0.07
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 8.33 8.33 0.00 6.11 0.00
dm-0 0.00 0.00 0.14 0.38 0.01 0.01 52.79 0.01 14.07 1.54 18.67 1.34 0.07
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 47.40 0.00 1.48 1.48 0.00 0.79 0.00
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.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 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
輸出說明:
%user:CPU處在使用者模式下的時間百分比。
%nice:CPU處在帶NICE值的使用者模式下的時間百分比。
%system:CPU處在系統模式下的時間百分比。
%iowait:CPU等待輸入輸出完成時間的百分比。
%steal:管理程式維護另一個虛拟處理器時,虛拟CPU的無意識等待時間百分比。
%idle:CPU空閑時間百分比。
備注:如果%iowait的值過高,表示硬碟存在I/O瓶頸,%idle值高,表示CPU較空閑,如果%idle值高但系統響應慢時,有可能是CPU等待配置設定記憶體,此時應加大記憶體容量。%idle值如果持續低于10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。
示例2:
[[email protected] tsar-master]# iostat -cxm 1 2
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.11 0.00 0.12 0.02 0.00 99.75
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.09 0.19 0.29 0.01 0.01 60.83 0.00 8.07 1.28 12.48 1.51 0.07
scd0 0.00 0.00 0.00 0.00 0.00 0.00 114.22 0.00 8.33 8.33 0.00 6.11 0.00
dm-0 0.00 0.00 0.14 0.38 0.01 0.01 52.76 0.01 14.08 1.54 18.67 1.34 0.07
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 47.40 0.00 1.48 1.48 0.00 0.79 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.25 0.00 0.00 99.75
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.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 0.00 0.00
dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
輸出說明:
rrqm/s: 每秒進行 merge 的讀操作數目。即 rmerge/s
wrqm/s: 每秒進行 merge 的寫操作數目。即 wmerge/s
r/s: 每秒完成的讀 I/O 裝置次數。即 rio/s
w/s: 每秒完成的寫 I/O 裝置次數。即 wio/s
rsec/s: 每秒讀扇區數。即 rsect/s
wsec/s: 每秒寫扇區數。即 wsect/s
rkB/s: 每秒讀K位元組數。是 rsect/s 的一半,因為每扇區大小為512位元組。
wkB/s: 每秒寫K位元組數。是 wsect/s 的一半。
avgrq-sz: 平均每次裝置I/O操作的資料大小 (扇區)。
avgqu-sz: 平均I/O隊列長度。
await: 平均每次裝置I/O操作的等待時間 (毫秒)。
svctm: 平均每次裝置I/O操作的服務時間 (毫秒)。
%util: 一秒中有百分之多少的時間用于 I/O 操作,即被io消耗的cpu百分比
備注:如果 %util 接近 100%,說明産生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明I/O 隊列太長,io響應太慢,則需要進行必要優化。如果avgqu-sz比較大,也表示有當量io在等待。
分析:
如果 %util 接近 100%,說明的I/O請求太多,I/O已經滿負荷,該磁盤可能存在瓶頸。
idle小于70% IO壓力就較大了,一般讀取速度有較多的wait。
可以結合vmstat 檢視檢視b參數(等待資源的程序數)和wa參數(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)。
await 的參數也要多和 svctm 來參考。差的過高就一定有 IO 的問題。
avgqu-sz 也是個做 IO 調優時需要注意的地方,這個就是直接每次操作的資料的大小,如果次數多,但資料拿的小的話,其實 IO 也會很小。如果資料拿的大,才IO 的資料會高。也可以通過 avgqu-sz × ( r/s or w/s ) = rsec/s or wsec/s。也就是講,讀定速度是這個來決定的。
svctm 一般要小于 await (因為同時等待的請求的等待時間被重複計算了),svctm 的大小一般和磁盤性能有關,CPU/記憶體的負荷也會對其有影響,請求過多也會間接導緻 svctm 的增加。await 的大小一般取決于服務時間(svctm) 以及 I/O 隊列的長度和 I/O 請求的發出模式。如果 svctm 比較接近 await,說明 I/O 幾乎沒有等待時間;如果 await 遠大于 svctm,說明 I/O 隊列太長,應用得到的響應時間變慢,如果響應時間超過了使用者可以容許的範圍,這時可以考慮更換更快的磁盤,調整核心 elevator 算法,優化應用,或者更新 CPU。
隊列長度(avgqu-sz)也可作為衡量系統 I/O 負荷的名額,但由于 avgqu-sz 是按照機關時間的平均值,是以不能反映瞬間的 I/O 洪水。
六、iftop:網卡的實時流量監控(可以指定網段)、反向解析IP、顯示端口資訊等
安裝:yum install iftop -y
格式:iftop 選項 # 可以使用選項或者子指令實作指定功能
常用選項:
-i # 設定監測的網卡,如:# iftop -i eth1
-B # 以bytes為機關顯示流量(預設是bits),如:# iftop -B
-n # 使host資訊預設直接都顯示IP,如:# iftop -n
-N # 使端口資訊預設直接都顯示端口号,如: # iftop -N
-F #顯示特定網段的進出流量
如iftop -F 172.30.1.0/24或# iftop -F 172.30.1.0/255.255.255.0
-h # 幫助,顯示參數資訊
-p # 使用這個參數後,中間的清單顯示的本地主機資訊,出現了本機以外的IP資訊;
-b # 使流量圖形條預設就顯示;
-f # 這個暫時還不太會用,過濾計算包用的;
-P # 使host資訊及端口資訊預設就都顯示;
-m # 設定界面最上邊的刻度的最大值,刻度分五個大段顯示,
例:# iftop -m 100M
常用子指令:
h # 切換是否顯示幫助;
n # 切換顯示本機的IP或主機名;
s # 切換是否顯示本機的host資訊;
d # 切換是否顯示遠端目标主機的host資訊;
t # 切換顯示格式為2行/1行/隻顯示發送流量/隻顯示接收流量;
N # 切換顯示端口号或端口服務名稱;
S # 切換是否顯示本機的端口資訊;
D # 切換是否顯示遠端目标主機的端口資訊;
p # 切換是否顯示端口資訊;
P # 切換暫停/繼續顯示;
b # 切換是否顯示平均流量圖形條;
B #切換計算2秒或10秒或40秒内的平均流量;
T # 切換是否顯示每個連接配接的總流量;
l # 打開螢幕過濾功能,輸入要過濾的字元
比如ip,按回車後,螢幕就隻顯示這個IP相關的流量資訊;
L # 切換顯示畫面上邊的刻度;刻度不同,流量圖形條會有變化;
j或按k # 可以向上或向下滾動螢幕顯示的連接配接記錄;
1或2或3 # 可以根據右側顯示的三列流量資料進行排序;
< # 根據左邊的本機名或IP排序;
> # 根據遠端目标主機的主機名或IP排序;
o # 切換是否固定隻顯示目前的連接配接;
f # 可以編輯過濾代碼,這是翻譯過來的說法,我還沒用過這個!
! # 可以使用shell指令,這個沒用過!沒搞明白啥指令在這好用呢!
q # 退出監控。
示例:
[[email protected] tsar-master]# iftop -i ens33
輸出字段說明:
界面上面顯示的是類似刻度尺的刻度範圍,為顯示流量圖形的長條作标尺用的。
中間的<= =>這兩個左右箭頭,表示的是流量的方向。
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運作iftop到目前時間的總流量
peak:流量峰值
rates:分别表示過去 2s 10s 40s 的平均流量
七、mpstat:CPU監控工具
mpstat是 Multiprocessor Statistics的縮寫,是實時系統監控工具。其報告與CPU的一些統計資訊,這些資訊存放在/proc/stat檔案中。在多CPU系統裡,其不但能檢視所有CPU的平均狀況資訊,而且能夠檢視特定CPU的資訊。
指令格式:
mpstat -P cpu|ALL n m
# n:采樣周期 m:采樣次數 -P指定檢視單個CPU還是說有CPU
示例:
[[email protected] ~]# mpstat 2 3
Linux 3.10.0-862.el7.x86_64 (localhost.localdomain) 03/06/2020 _x86_64_ (4 CPU)
09:31:32 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:31:34 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
09:31:36 AM all 0.00 0.00 0.13 0.13 0.00 0.00 0.00 0.00 0.00 99.75
09:31:38 AM all 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.87
Average: all 0.04 0.00 0.04 0.04 0.00 0.00 0.00 0.00 0.00 99.87
輸出字段含義:
CPU工作時間:
total_cur = user + system + nice + idle + iowait + irq + softirq
total_pre = pre_user + pre_system + pre_nice + pre_idle + pre_iowait + pre_irq + pre_softirq
user = user_cur – user_pre
total = total_cur - total_pre
八、sysdig:多監控次元的整合工具,支援docker監控(docker自帶,将在docker部分介紹)