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 記錄時間 接收數據大小 每秒大小 延時 丟包/總包 丟包率


免責聲明!

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



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