1. 程式人生 > 其它 >linux下的CPU、記憶體、磁碟IO、網路壓力測試方法

linux下的CPU、記憶體、磁碟IO、網路壓力測試方法

linux下的CPU、記憶體、磁碟IO、網路壓力測試方法彙總

一、CPU

Linux系統下對CPU進行壓力測試的方法有很多,這裡介紹兩種比較常用的方法:

1、Stress

Stress是一個Posix系統下生成Cpu/Menory/IO/Disk負載的工具。是Unix類系統下的工作量和壓力測試工具。它將對使用者指定的CPU數量的I/O,記憶體和硬碟的負載並報告它檢測到任何錯誤。可用於自動壓力測試。

[Stress-1.0.4下載地址:](https://fossies.org/linux/privat/stress-1.0.4.tar.gz/

下載後,將stress-1.0.4.tar.gz複製到“/etc/local/src/”目錄下:

執行以下命令安裝:

#cd /usr/local/src
#tar -xzpvf stress-1.0.4.tar.gz
#cd stress-1.0.4
#./configure
#make
#make check
#make install
#make clean

使用Stress對CPU進行壓測,在被測節點的其中一個終端中執行以下命令:

建立8個stress程序,持續時間600秒,模擬CPU在使用者態使用率達到100%的場景。
stress --cpu 8 --timeout 600
建立100個io程序,持續時間600秒,模擬CPU在核心態使用率達到100%的場景。
stress  --io 100 --timeout 600
建立8個stress程序和100個io程序,持續時間600秒,模擬CPU在使用者態和核心態總使用率達到100%的場景。
stress -c 8 -i 100 --verbose --timeout 600

然後在節點的另外一個終端中執行以下命令檢視所有CPU的資源佔用情況:

mpstat -P ALL 2

2、dd命令

dd是一個常見的命令列工具,建立多個dd程序持續讀資料到null也可以達到對CPU進行壓力測試的目的,在被測節點的其中一個終端中執行以下命令:

i=`cat /proc/cpuinfo |grep processor |wc -l` && seq $i|xargs -P $i -I {} bash -c 'echo 'CPU' {} 'running' && dd if=/dev/zero of=/dev/null'

然後在節點的另外一個終端中執行以下命令檢視所有CPU的資源佔用情況:

mpstat -P ALL 2

以上就是常用的兩種CPU壓力測試的方法介紹,使用Stress軟體進行壓測的好處是可以按照自己的要求選擇不同的壓測模式,缺點就是需要下載和安裝軟體包,而dd命令列工具一般的系統預設都自帶了的,直接就能使用。

測試完成後使用kill命令結束所有dd程序即可:

killall dd

二、記憶體

1、Stress

stress 測試記憶體的時候,--vm-bytes 1G --vm-hang 100 這裡2個引數是關鍵!!!!
--vm-bytes 表示malloc分配多少記憶體
--vm-hang 表示malloc分配的記憶體多少時間後在free()釋放掉
--vm 指定程序數量,分配的記憶體總數為vm*vm-bytes
--timeout 持續時間

下面例子,就是建立5個程序,同時去malloc分配記憶體,並且保持100s後再釋放記憶體:

stress --vm 5 --vm-bytes 1G --vm-hang 100 --timeout 100s

注意:在進行記憶體壓測時,分配的記憶體總數不能超過節點的實際記憶體,否則命令會報錯退出。

2、ramfs檔案系統

ramfs檔案系統是一個利用VFS自身結構形成的記憶體檔案系統,RAMFS沒有自己的檔案儲存結構,他的檔案儲存於page cache 中,VFS本質上可以看成一種給予記憶體的檔案系統,它統一了檔案在核心中的表示方式並對磁碟檔案進行緩衝,這裡我們是建立一個ramfs檔案系統,然後寫入一定大小的檔案來模擬記憶體佔用。

mkdir /tmp/mem
mount -t ramfs ramfs /tmp/mem/
開始寫入檔案到記憶體,寫多少資料就佔用多少記憶體
dd if=/dev/zero of=/tmp/mem/file bs=1024k count=2048
釋放記憶體:
umount /tmp/mem/
rmdir /tmp/mem/

三、磁碟IO

1、Stress

引數說明:

-d --hdd forks 產生多個執行write()函式的程序
--hdd-bytes bytes 指定寫的Bytes數,預設是1GB

例子:

stress --hdd 2 --hdd-bytes 3G --timeout 200

解釋:--hdd 2:建立兩個寫程序。寫入固定大小通過mkstemp()函式寫入當前目錄;你也可以指定向磁碟中寫入固定大小的檔案,這個檔案通過呼叫mkstemp()產生並儲存在當前目錄下,預設是檔案產生後就被執行unlink(清除)操作。

2、FIO工具

FIO是測試磁碟頻寬和IOPS的非常好的工具,用來對硬體進行壓力測試和驗證,支援13種不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

順序寫:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=64k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

順序讀:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=64k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

隨機寫:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

隨機讀:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

混合隨機讀寫:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=4k -size=200m -numjobs=10 -runtime=60 -group_reporting -name=mytest

混合讀寫:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=rw -rwmixread=70 -ioengine=libaio -bs=4k -size=200m -numjobs=10 -runtime=60 -group_reporting -name=mytest

四、網路

iperf或iperf3

Iperf是一款基於TCP/IP和UDP/IP的網路效能測試工具,它可以用來測量網路頻寬和網路質量,還可以提供網路延遲抖動、資料包丟失率、最大傳輸單元等統計資訊。網路管理員可以根據這些資訊瞭解並判斷網路效能問題,從而定位網路瓶頸,解決網路故障。

示例:

服務端執行:
iperf -u -s
# -u表示以udp模式執行(不加該引數,預設是以tcp模式執行),-s表示作為服務端

客戶端執行:
iperf -u -c 192.168.30.115 -b 100M -t 60 -i 2
# 解釋:在udp模式下,以100Mbps為資料傳送速率,客戶端到伺服器192.168.30.115上傳頻寬測試,測試時間為60秒

iperf -c 192.168.30.115 -u -i 1 -t 10 -b 2M -P 2
# 解釋:客戶端同時向伺服器端發起2個連線執行緒,每個連線執行緒以2Mbps為資料傳送速率,測試時間為10秒

iperf -u -c 192.168.30.115 -b 1000M -d -t 60 -i 1  
# 解釋:以1000M為資料傳送速率,進行上下行頻寬測試,測試時間60秒,每秒顯示一次結果

測試結果說明:

[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-35.9 sec   449 MBytes   105 Mbits/sec   0.008 ms    0/320339 (0%)

從左至右依次為: 執行緒id 記錄時間 接收資料大小 每秒大小 延時 丟包/總包 丟包率