Linux 常用系統性能測試命令
此文檔基於CentOS7編寫。
一、CPU
1.top
命令
[root@localhost ~]# top
第1行:系統時間、運行時間、登錄終端數、系統負載(3個數值分別為1分鍾、5分鍾、15分鍾內的平均值)。
第2行:進程總數、運行中的進程數、睡眠中的進程數、停止的進程數、僵死的進程數。
第3行:用戶占用資源百分比、系統內核占用資源百分比、改變過優先級的進程資源百分比、空閑的資源百分比等。其中數據均為CPU數據並以百分比格式顯示,例如“99.9 id”意味着有99.9%的CPU處理器資源處於空閑。
第4行:物理內存總量、內存空閑量、內存使用量、作為內核緩存的內存量。
第5行:虛擬內存總量、虛擬內存空閑量、虛擬內存使用量、已被提前加載的內存量。
2.mpstat
用來查看CPU負載高的原因,mpstat
命令寫入每個可用處理器的標准輸出活動,處理器0是第一個。還報告了所有處理器的全球平均活動。mpstat
命令可以在SMP和UP機器上使用,但在后者中,只會打印全局平均活動。如果未選擇任何活動,則默認報告為CPU利用率。
# 每1秒統計一次,統計三次。
[root@k8s ~]# mpstat -P ALL 1 3
%user 在internal時間段里,用戶態的CPU時間(%),不包含nice值為負進程 (usr/total)100
%nice 在internal時間段里,nice值為負進程的CPU時間(%) (nice/total)100
%sys 在internal時間段里,內核時間(%) (system/total)100
%iowait 在internal時間段里,硬盤IO等待時間(%) (iowait/total)100
%irq 在internal時間段里,硬中斷時間(%) (irq/total)100
%soft 在internal時間段里,軟中斷時間(%) (softirq/total)100
%idle 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%) (idle/total)100
機器一共有四個核心,所以每次顯示的是4條記錄,這里的輸出主要看最后的Average數值。這是在沒有負載的情況下機器的負載情況。
指示要報告其統計信息的處理器編號。cpu是處理器編號。請注意,處理器0是第一個處理器。ON關鍵字表示要為每個聯機處理器報告統計信息,而ALL關鍵字表示要為所有處理器報告統計信息。
測試一:增加系統IO
[root@k8s ~]# stress --io 1000 --timeout 600
stress: info: [84278] dispatching hogs: 0 cpu, 1000 io, 0 vm, 0 hdd
這里可以看出系統在高IO的情況下,CPU的內核態占用很高,最后的空閑占的很少。
通過pidstat
查看哪個進程對CPU的影響。
[root@k8s ~]# pidstat -u 3 5
看哪個進程對CPU的影響。看%system列的占用情況,然后根據實際情況進行進程的動作。
測試二:增加cpu的計算采用大量線程
[root@k8s ~]# stress -c 4 --timeout 600
stress: info: [7634] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
這里可以看出系統在大量進程的情況下,CPU的用戶態占用很高,最后的空閑%idle占的很少。不管是內核態的升高還是用戶態的升高都會導致系統空閑程度的下降。
通過pidstat
查看哪個進程對CPU的影響。
[root@k8s ~]# pidstat -u 3 5
看哪個進程對CPU的影響。看%usr列的占用情況,然后根據實際情況進行進程的動作。
查看對io高的進程pid
pidstat -d 3
# 沒三秒查詢一次磁盤的io
二、內存
free -h
查看內存占用高的進程PID
[root@k8s ~]# ps aux | sort -n -k 3 -r|head
三、磁盤
1.查看磁盤容量
會顯示磁盤占用的空間量Use%
如果有100%的就需要清理磁盤,一般從先從日志文件下手。
df -h
# 顯示操作系統文件系統
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 979M 0 979M 0% /dev
tmpfs tmpfs 991M 0 991M 0% /dev/shm
tmpfs tmpfs 991M 9.6M 981M 1% /run
tmpfs tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 49G 1.8G 48G 4% /
/dev/sda1 xfs 1014M 137M 878M 14% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
2.磁盤負載
# 所依耐安裝包
yum -y install sysstat
iostat -dmx 1 3
# 每秒顯示一次顯示三次。
# 常用參數
-d # 顯示設備(磁盤)使用狀態
-c # 只顯示CPU行
-k # 以千字節為單位顯示磁盤輸出
-m # 以每秒兆字節為單位顯示統計信息
-t # 在輸出中包括時間戳
-x # 在輸出中包括擴展的磁盤指標
rrqm/s: 每秒進行 merge 的讀操作數目。
wrqm/s: 每秒進行 merge 的寫操作數目。
r/s: 每秒完成的讀 I/O 設備次數。
w/s: 每秒完成的寫 I/O 設備次數。
rsec/s: 每秒讀扇區數。
wsec/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 操作。
關於Merge的解釋:當系統調用需要讀取數據的時 候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合並Merge
await:每一個IO請求的處理的平均時間(單位是毫秒)。這里可以理解為IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。
%util:在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該 設備有0.8秒在處理IO,而0.2秒閑置,那么該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因 為磁盤的並發能力,所以磁盤使用未必就到了瓶頸)。
四、網絡測試
1.iperf3 測試網絡帶寬
# 服務端運行
[root@k8s ~]# iperf3 -s
# 客戶端運行
[root@k8s net]# iperf3 -c 10.4.7.10
2.查看網卡是否有丟包
# 查看error字段
[root@k8s ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.4.7.10 netmask 255.255.255.0 broadcast 10.4.7.255
inet6 fe80::20c:29ff:fe78:a8e1 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:78:a8:e1 txqueuelen 1000 (Ethernet)
RX packets 23719 bytes 26537409 (25.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9663 bytes 1953840 (1.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@k8s ~]# ethtool -S ens33 |grep -i error
rx_errors: 0
tx_errors: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
rx_long_length_errors: 0
rx_short_length_errors: 0
rx_align_errors: 0
rx_csum_offload_errors: 0
[root@k8s ~]# ethtool ens33
Settings for ens33:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
# Speed: 1000Mb/s # 網卡速率
# Duplex: Full # 全雙工
# Link detected: yes # 物理鏈路