linux下對CPU、內存、IO、網絡進行壓力測試

轉載地址:http://wushank.blog.51cto.com/3489095/1585927
一、對CPU進行簡單測試:
1、通過bc命令計算特別函數
例:計算圓周率
echo “scale=5000; 4*a(1)” | bc -l -q
MATH LIBRARY
If bc is invoked with the -l option, a math library is preloaded and the default scale is set to 20.
The math functions will calculate their results to the scale set at the time of their call. The math
library defines the following functions:
s (x) The sine of x, x is in radians. 正玄函數
c (x) The cosine of x, x is in radians. 餘玄函數
a (x) The arctangent of x, arctangent returns radians. 反正切函數
l (x) The natural logarithm of x. log函數(以2爲底)
e (x) The exponential function of raising e to the value x. e的指數函數
j (n,x) The bessel function of integer order n of x. 貝塞爾函數

添加:
1.我工作中一般用一個死循環進行cpu佔用,這樣可以比較持續,簡單粗暴的進行~~
while [ 1 ]

do

echo 1 >> /dev/null  

done

2、工具二:Super Pi for linux

Super PI是利用CPU的浮點運算能力來計算出π(圓周率),所以目前普遍被超頻玩家用做測試系統穩定性和測試CPU計算完後特定位數圓周率所需的時間。
http://www.super-computing.org/
下載頁:ftp://pi.super-computing.org/

wget ftp://pi.super-computing.org/Linux/super_pi.tar.gz
tar -xzvf super_pi.tar.gz
./super_pi 20
20爲位數。表示要算2的多少次方位,如通常要算小數點後1M位。
wKiom1R-rnXCmbdwAASCjAYEnzQ462.jpg

二、對內存進行簡單測試:
工具:memtester
官方:http://pyropus.ca/software/memtester/

wget http://pyropus.ca/software/memtester/old-versions/memtester-4.3.0.tar.gz
tar -xzvf memtester-4.3.0.tar.gz
cd memtester-4.3.0
make && make install
用法:Usage: ./memtester [-p physaddrbase [-d device]] [B|K|M|G] [loops]
例:memtester 1G 5
wKioL1R-s8yAbf4yAAKk1_Y7zbE003.jpg

三、對IO進行簡單測試:
1、利用dd來進行測試:
time dd if=/dev/zero of=test bs=1M count=4096
用top和iostat查看wa%及寫硬盤速度
2、使用fio命令進行測試:
FIO是測試IOPS的非常好的工具,用來對硬件進行壓力測試和驗證,支持13種不同的I/O引擎,
包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

說明:
filename=/dev/sdb1 測試文件名稱,通常選擇需要測試的盤的data目錄。
direct=1 測試過程繞過機器自帶的buffer。使測試結果更真實。
rw=randwrite 測試隨機寫的I/O
rw=randrw 測試隨機寫和讀的I/O
bs=16k 單次io的塊文件大小爲16k
bsrange=512-2048 同上,提定數據塊的大小範圍
size=5g 本次的測試文件大小爲5g,以每次4k的io進行測試。
numjobs=30 本次的測試線程爲30.
runtime=1000 測試時間爲1000秒,如果不寫則一直將5g文件分4k每次寫完爲止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合讀寫的模式下,寫佔30%
group_reporting 關於顯示結果的,彙總每個進程的信息。
此外
lockmem=1g 只使用1g內存進行測試。
zero_buffers 用0初始化系統buffer。
nrfiles=8 每個進程生成文件的數量。

隨機讀:
fio –filename=/dev/sda3 –direct=1 –iodepth 1 –thread –rw=randread –ioengine=psync –bs=4k –size=2G –numjobs=10 –runtime=100 –group_reporting –name=mytest
順序讀:
fio –filename=/dev/sda3 –direct=1 –iodepth 1 –thread –rw=read –ioengine=psync –bs=4k –size=2G –numjobs=10 –runtime=100 –group_reporting –name=mytest
隨機寫:
fio –filename=/dev/sda3 –direct=1 –iodepth 1 –thread –rw=randwrite –ioengine=psync –bs=4k –size=2G –numjobs=10 –runtime=100 –group_reporting –name=mytest
順序寫:
fio –filename=/dev/sda3 –direct=1 –iodepth 1 –thread –rw=write –ioengine=psync –bs=4k –size=2G –numjobs=10 –runtime=100 –group_reporting –name=mytest
混合隨機讀寫:
fio –filename=/dev/sda3 –direct=1 –iodepth 1 –thread –rw=randrw –rwmixread=70 –ioengine=psync –bs=4k –size=2G –numjobs=10 –runtime=100 –group_reporting –name=mytest –ioscheduler=noop

3、iozone測試 (我選擇的)
IOZONE主要用來測試操作系統文件系統性能的測試工具,該工具所測試的範圍主要有,write , Re-write, Read, Re-Read, Random Read, Random Write, Random Mix, Backwards Read, Record Rewrite, Strided Read, Fwrite, Frewrite, Fread, Freread, Mmap, Async I/O

使用iozone可以在多線程、多cpu,並指定cpu cache空間大小以及同步或異步I/O讀寫模式的情況下進行測試文件操作性能;

(0=write/rewrite, 1=read/re-read, 2=random-read/write
3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite, 7=fread/Re-fread,
8=random mix, 9=pwrite/Re-pwrite, 10=pread/Re-pread, 11=pwritev/Re-pwritev, 12=preadv/Re-preadv).

工具:IOzone
官方:http://www.iozone.org/

wget http://www.iozone.org/src/current/iozone3_429.tar
tar -xvf iozone3_429.tar
cd iozone3_429/src/current
make
make linux-ia64

參數:
-a 用來使用全自動模式。生成包括所有測試操作的報告,使用的塊 大小從4k到16M,文件大小從64k到512M
-R 產生execl格式的輸出日誌。
-b 將產生二進制的execl的日誌文件名。
-s 測試的文件大小。
-q 指定最大文件塊大小(這裏的 -q 64k 包括了4K,8K,16K,32K,64K)
-r 指測試的文件塊大小(與-q有別,-r 64k只進行64k的測試)
-a 在希望的文件系統上測試,不過只有-a的話會進行全面測試,要花費很長時間,最好用-i指定測試範圍。
-g 指定最大測試文件大小。
-n 指定最小測試文件大小。
-f 指定測試文件的名字,完成後會自動刪除(這個文件必須指定在你要測試的那個硬盤中)
-C 顯示每個節點的吞吐量。
-c 測試包括文件的關閉時間
-t 指定線程數
-D 對mmap文件使用msync(MS_ASYNC) 。這告訴操作系統在mmap空間的所有數據需要被異步地寫到磁盤上。
-G 對mmap文件使用msync(MS_SYNC)。這告訴操作系統在mmap空間的所有數據需要被同步地寫到磁盤上。

針對文件系統的測試可以按一下幾項執行操作:
例:iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /mnt/iozone -Rb ./iozone.xls
進行全面測試.最小測試文件爲512M直到測試到4G.測試read,write,和Strided Read.測試的地方在mnt下。生成Excel的文件

1.多線程下的同步I/O讀寫測試

分別針對128K,16M,256M,2G文件大小和8進程,64進程,128進程數進行測試

主要測試文件寫和重複寫、讀和重複讀、隨即讀寫、後向讀、文件內隨即點寫、大間隔文件點讀、文件內的隨即點讀寫等測試項,記錄大小1M cpu cache 2048kbyte。

1.1 128k 文件性能測試:

測試命令爲:

iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -G -o -B -Rb iozone.xls
iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -G -o -B -Rb iozone.xls
iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -G -o -B -Rb iozone.xls

1.2 16M文件性能測試

測試命令爲:

iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -G -o -B -Rb iozone.xls
iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -G -o -B -Rb iozone.xls
iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -G -o -B -Rb iozone.xls

1.3 256M文件性能測試

測試命令爲:

iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -G -o -B -Rb iozone.xls
iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -G -o -B -Rb iozone.xls
iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -G -o -B -Rb iozone.xls

1.4 2G文件性能測試

測試命令爲:

iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -G -o -B -Rb iozone.xls
iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -G -o -B -Rb iozone.xls
iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -G -o -B -Rb iozone.xls

2. 多線程下的異步I/O讀寫測試

分別針對128K,16M,256M,2G文件大小和8進程,64進程,128進程數進行測試

主要測試文件寫和重複寫、讀和重複讀、隨即讀寫、後向讀、文件內隨即點寫、大間隔文件點讀、文件內的隨即點讀寫等測試項。

2.1 128k 文件性能測試:

測試命令爲:

iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -D -o -B -Rb iozone.xls
iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -D -o -B -Rb iozone.xls
iozone -s 128k -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -D -o -B -Rb iozone.xls

2.2 16M文件性能測試

測試命令爲:
iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -D -o -B -Rb iozone.xls
iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -D -o -B -Rb iozone.xls
iozone -s 16M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -D -o -B -Rb iozone.xls

2.3 256M文件性能測試

測試命令爲:

iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -D -o -B -Rb iozone.xls
iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -D -o -B -Rb iozone.xls
iozone -s 256M -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -D -o -B -Rb iozone.xls

2.4 2G文件性能測試

測試命令爲:

iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 8 -D -o -B -Rb iozone.xls
iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 64 -D -o -B -Rb iozone.xls
iozone -s 2G -i 0 -i 1 -i 2 -i 3 -i 4 -i 5 -i 8 -t 128 -D -o -B -Rb iozone.xls

使用的腳本:

#!/bin/bash
io102cmd=/eric/iozone
HOSTNAME=`hostname`
DATE=`date +%Y-%m-%d-%H`
IP=`cat /etc/sysconfig/network-scripts/ifcfg-enp8s0 |grep "IPADDR" |awk -F '=' '{print $2}'`
RECSIZE=1m
THREADS=24              #max maximum value 254  disks*loops=THREADS(36*7=252)
FILESIZE=12g    #test data block mul disks ej:850g*36=30600g
LOG=/datapool/log/${DATE}_${HOSTNAME}_io102zone_${IP}_${RECSIZE}_${FILESIZE}_${THREADS}
i=0                     #loop counts form 0 - 6 

while [ $i -lt 2 ]
do
FILE1=" /datapool/io102/a${i} /datapool/io102/b${i} /datapool/io102/c${i} /datapool/io102/d${i} /datapool/io102/e${i} /datapool/io102/f${i} /datapool/io102/g${i} /datapool/io102/h${i} /datapool/io102/i${i} /datapool/io102/j${i} /datapool/io102/k${i} /datapool/io102/l${i} ${FILE1} "
i=` expr $i + 1 `
done

while [ 1 ]
do
echo $FILE1

$io102cmd  -r ${RECSIZE} -s ${FILESIZE} -t ${THREADS} -F ${FILE1} -i 0 -i 1 -+n -w -+k -R -b report.xls -c -C -e >> $LOG
done

四、網絡測試工具iperf:
Iperf 是一個網絡性能測試工具。Iperf可以測試TCP和UDP帶寬質量。Iperf可以測量最大TCP帶寬,具有多種參數和UDP特性。Iperf可以報告帶寬,延遲抖動和數據包丟失。

Iperf使用方法與參數說明

參數說明
-s 以server模式啓動,eg:iperf -s
-c host以client模式啓動,host是server端地址,eg:iperf -c 222.35.11.23
通用參數
-f [k|m|K|M] 分別表示以Kbits, Mbits, KBytes, MBytes顯示報告,默認以Mbits爲單位,eg:iperf -c 222.35.11.23 -f K
-i sec 以秒爲單位顯示報告間隔,eg:iperf -c 222.35.11.23 -i 2
-l 緩衝區大小,默認是8KB,eg:iperf -c 222.35.11.23 -l 16
-m 顯示tcp最大mtu值
-o 將報告和錯誤信息輸出到文件eg:iperf -c 222.35.11.23 -o c:\iperflog.txt
-p 指定服務器端使用的端口或客戶端所連接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp協議
-w 指定TCP窗口大小,默認是8KB
-B 綁定一個主機地址或接口(當主機有多個地址或接口時使用該參數)
-C 兼容舊版本(當server端和client端版本不一樣時使用)
-M 設定TCP數據包的最大mtu值
-N 設定TCP不延時
-V 傳輸ipv6數據包

server專用參數
-D 以服務方式運行ipserf,eg:iperf -s -D
-R 停止iperf服務,針對-D,eg:iperf -s -R

client端專用參數
-d 同時進行雙向傳輸測試
-n 指定傳輸的字節數,eg:iperf -c 222.35.11.23 -n 100000
-r 單獨進行雙向傳輸測試
-t 測試時間,默認10秒,eg:iperf -c 222.35.11.23 -t 5
-F 指定需要傳輸的文件
-T 指定ttl值

2.還有一個netperf 類似
netperf

1、下載地址:
wget ftp://ftp.netperf.org/netperf/netperf-2.5.0.tar.gz
2、參考資料:
http://baike.baidu.com/view/3506574.htm?fr=ala0_1_
3、功能介紹
man 說明
Netperf is a benchmark that can be used to measure various aspects of networking performance. Currently, its focus is on bulk data transfer and request/response performance using either TCP or UDP, and the Berkeley Sockets interface. In addition, tests for DLPI, and Unix Domain Sockets, tests for IPv6 may be conditionally compiled-in.
3.1、對TCP(缺省情況下進行TCP批量傳輸,即-t TCP_STREAM),Netperf可以模擬三種不同的TCP流量模式:

  1) 單個TCP連接,批量(bulk)傳輸大量數據,測試過程中,netperf向netserver發送批量的TCP數據分組,以確定數據傳輸過程中的吞吐量(附錄6)
2) 單個TCP連接,client請求/server應答的交易(transaction)方式(附錄8)
3) 多個TCP連接,每個連接中一對請求/應答的交易方式(附錄9

3.2、對UDP(指定-t UDP_STREAM),Netperf可以模擬兩種UDP的流量模式:
  1) 從client到server的單向批量傳輸 (附錄7
2) 請求/應答的交易方式(附錄10)

參考地址:http://qa.blog.163.com/blog/static/1901470022011102543322445/

五、apache ab 壓力測試:
ab是Apache超文本傳輸協議(HTTP)的性能測試工具。 其設計意圖是描繪當前所安裝的Apache的執行性能, 主要是顯示你安裝的Apache每秒可以處理多少個請求

ab是Apache超文本傳輸協議(HTTP)的性能測試工具。 其設計意圖是描繪當前所安裝的Apache的執行性能, 主要是顯示你安裝的Apache每秒可以處理多少個請求。

概要

ab [ -A auth-username ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x

-attributes ] [ -X proxy[] ] [ -y -attributes ] [ -z
-attributes ] [http://]hostname[:port]/path

選項

-A auth-username:password
對服務器提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以base64編碼形式發送。 無論服務器是否需要(即, 是否發送了401認證需求代碼),此字符串都會被髮送。
-c concurrency
一次產生的請求個數。默認是一次一個。
-C cookie-name=value
對請求附加一個Cookie:行。 其典型形式是name=value的一個參數對。 此參數可以重複。
-d
不顯示”percentage served within XX [ms] table”的消息(爲以前的版本提供支持)。
-e csv-file
產生一個以逗號分隔的(CSV)文件, 其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙爲單位)時間。 由於這種格式已經“二進制化”,所以比’gnuplot’格式更有用。
-g gnuplot-file
把所有測試結果寫入一個’gnuplot’或者TSV (以Tab分隔的)文件。 此文件可以方便地導入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行爲標題。
-h
顯示使用方法。
-H custom-header
對請求附加額外的頭信息。 此參數的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對 (如, “Accept-Encoding: zip/zop;8bit”).
-i
執行HEAD請求,而不是GET。
-k
啓用HTTP KeepAlive功能,即, 在一個HTTP會話中執行多個請求。 默認時,不啓用KeepAlive功能.
-n requests
在測試會話中所執行的請求個數。 默認時,僅執行一個請求,但通常其結果不具有代表意義。
-p POST-file
包含了需要POST的數據的文件.
-P proxy-auth-username:password
對一箇中轉代理提供BASIC認證信任。 用戶名和密碼由一個:隔開,並以base64編碼形式發送。 無論服務器是否需要(即, 是否發送了401認證需求代碼),此字符串都會被髮送。
-q
如果處理的請求數大於150, ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。 此-q標記可以抑制這些信息。
-s
用於編譯中(ab -h會顯示相關信息)使用了SSL的受保護的https, 而不是http協議的時候。此功能是實驗性的,也是很簡陋的。最好不要用。
-S
不顯示中值和標準背離值, 而且在均值和中值爲標準背離值的1到2倍時,也不顯示警告或出錯信息。 默認時,會顯示 最小值/均值/最大值等數值。(爲以前的版本提供支持).
-t timelimit
測試所進行的最大秒數。其內部隱含值是-n 50000。 它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。
-T content-type
POST數據所使用的Content-type頭信息。
-v verbosity
設置顯示信息的詳細程度 - 4或更大值會顯示頭信息, 3或更大值可以顯示響應代碼(404, 200等), 2或更大值可以顯示警告和其他信息。
-V
顯示版本號並退出。
-w
以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。
-x -attributes
設置 屬性的字符串。 此屬性被填入

例:ab -c 1000 -n 1000  http://127.0.0.1/sw3560/index.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.NET/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests


Server Software:        Apache/2.2.3
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /sw3560/index.html
Document Length:        5767 bytes

Concurrency Level:      1000              #併發的用戶數
Time taken for tests:   3.85301 seconds   #表示所有這些請求被處理完成所花費的時間總和Complete requests:      1000              
Failed requests:        0
Write errors:           0
Total transferred:      6034000 bytes     #所有請求的響應數據長度總和
HTML transferred:       5767000 bytes     #所有請求的響應數據中正文數據的總和
Requests per second:    324.12 [#/sec] (mean)     #重點:吞吐率,他等於Complete requests / Time taken for tests(相當於 LR 中的 每秒事務數 ,後面括號中的 mean 表示這是一個平均值)
Time per request:       3085.301 [ms] (mean)      #用戶平均請求等待時間,他等於Time taken for tests /(Complete requests / Concurrency Level)【相當於 LR 中的 平均事務響應時間】
Time per request:       3.085 [ms] (mean, across all concurrent requests)
                                                         #服務器平均請求處理時間他等於Time taken for tests / Complete requests (每個請求實際運行時間的平均值)
Transfer rate:          1909.70 [Kbytes/sec] received
                                                  #請求在單位時間內從服務器獲取數據的長度他等於Total transferred / Time taken for tests 這個統計選項可以很好的說明服務器在處理能力達到極限時其出口帶寬的需求量
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   30  16.6     30      59
Processing:    21  924 975.9    612    3027
Waiting:       20  923 976.0    612    3026
Total:         21  954 987.4    637    3084

Percentage of the requests served within a certain time (ms)
  50%    637
  66%   1437
  75%   1455
  80%   1462
  90%   3068
  95%   3076
  98%   3081
  99%   3083
100%   3084 (longest request)

用於描述每個請求處理時間的分佈情況,例如:50% 1 50%請求處理時間不超過1秒 (這裏所指的處理時間是指:Time per request )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章