Linux 性能基準(zhǔn)測試工具及測試方法
還是老規(guī)矩,先請(qǐng)性能領(lǐng)域的大師布倫丹·格雷格(Brendan Gregg)登場 ??????
linux_benchmarking_tools
整理測試指標(biāo)如下圖
圖片
測試環(huán)境說明:CentOS7, 4c8g
CPU
Super_Pi 是一種用于計(jì)算圓周率π的程序,通常用于測試計(jì)算機(jī)性能和穩(wěn)定性。它的主要用途是測量系統(tǒng)的單線程性能,因?yàn)樗且粋€(gè)單線程應(yīng)用程序。
# 安裝 bc
yum -y install bc
# 測試
time echo "scale=5000; 4*a(1)" | bc -l -q &>1
# 結(jié)果分析,看 real 即可,時(shí)間越短,性能越好
圖片
sysbench 素?cái)?shù)計(jì)算
# 安裝 sysbench
yum -y install sysbench
# 測試方法: 啟動(dòng)4個(gè)線程計(jì)算10000事件所花的時(shí)間
sysbench cpu --threads=4 --events=10000 --time=0 run
# 結(jié)果分析,看 total time 即可,時(shí)間越短,性能越好
圖片
內(nèi)存
內(nèi)存帶寬(stream)
Stream測試是內(nèi)存測試中業(yè)界公認(rèn)的內(nèi)存帶寬性能測試基準(zhǔn)工具
# 編譯安裝 STREAM
yum -y install gcc gcc-gfortran
git clone https://github.com/jeffhammond/STREAM.git
cd STREAM/
make
# 指定線程數(shù)
export OMP_NUM_THREADS=1
./stream_c.exe
# 結(jié)果分析,看 Copy、Scale、Add、Triad,數(shù)值越大,性能越好
圖片
磁盤 IO
?? 測試時(shí)請(qǐng)準(zhǔn)備裸的數(shù)據(jù)盤,測試完成后請(qǐng)重新格式化磁盤
測試方法和結(jié)果分析和文件 IO 測試相同,--filename 改為具體的數(shù)據(jù)盤即可,比如/dev/sda ,這里不再贅述
文件 IO
磁盤讀、寫iops
iops:磁盤的每秒讀寫次數(shù),這個(gè)是隨機(jī)讀寫考察的重點(diǎn)
# 安裝
yum -y install fio
# 測試隨機(jī)讀 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/home/randread.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 測試隨機(jī)寫 IOPS
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randwrite --filename=/home/randwrite.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 結(jié)果分析,看 IOPS 即可,值越大,性能越好
圖片
圖片
磁盤讀、寫帶寬
bw:磁盤的吞吐量,這個(gè)是順序讀寫考察的重點(diǎn)
# 測試順序讀
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=read --filename=/home/read.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 測試順序?qū)?fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=write --filename=/home/write.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-dep1 --size=1g
# 結(jié)果分析,看 BW 即可,值越大,性能越好
圖片
圖片
?? 因地制宜,靈活選取。在基準(zhǔn)測試時(shí),一定要注意根據(jù)應(yīng)用程序 I/O 的特點(diǎn),來具體評(píng)估指標(biāo)。
比如 etcd 磁盤性能衡量指標(biāo)為:WAL 文件系統(tǒng)調(diào)用 fsync 的延遲分布,當(dāng) 99% 樣本的同步時(shí)間小于 10 毫秒就可以認(rèn)為存儲(chǔ)性能能夠滿足 etcd 的性能要求。
mkdir etcd-bench fio --rw=write --ioengine=sync --fdatasync=1 --directory=etcd-bench --size=22m --bs=2300 --name=etcd-bench
圖片
網(wǎng)絡(luò)
傳輸速率(pps)
# server & client 編譯安裝 netserver
wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
yum -y install gcc cc
tar zxvf netperf-2.5.0.tar.gz
cd netperf-netperf-2.5.0
./configure && make && make install
# server 端啟動(dòng) netserver
netserver
# 監(jiān)控?cái)?shù)據(jù)
sar -n DEV 5
# client 端測試
netperf -t UDP_STREAM -H <server ip> -l 100 -- -m 64 -R 1 &
# 監(jiān)控?cái)?shù)據(jù)
sar -n DEV 5
# 結(jié)果分析,看 rxpck/s,txpck/s 值即可,值越大,性能越好
圖片
網(wǎng)絡(luò)帶寬
# server 端啟動(dòng) netserver
netserver
# 監(jiān)控?cái)?shù)據(jù)
sar -n DEV 5
# client 端測試
netperf -t TCP_STREAM -H <server ip> -l 100 -- -m 1500 -R 1 &
# 監(jiān)控?cái)?shù)據(jù)
sar -n DEV 5
# 結(jié)果分析,看 rxkB/s,txkB/s 值即可,值越大,性能越好
圖片
Nginx
# 安裝 ab 工具
yum -y install httpd-tools
# 編譯安裝 wrk
git clone https://github.com/wg/wrk.git
make
cp wrk /usr/local/bin/
# 測試,-c表示并發(fā)連接數(shù)1000,-t表示線程數(shù)為2,-d 表示測試時(shí)間
wrk -t12 -c400 -d30s <URL>
# 結(jié)果分析,Requests/sec 為 QPS
圖片
自動(dòng)化壓測腳本
壓測需要大量采樣,并實(shí)時(shí)觀察
git clone https://github.com/clay-wangzhi/bench.git
bash bench.sh
圖片
更多測試方法,詳見 https://github.com/clay-wangzhi/bench