> Linux服务器 > 性能测试 >

linux下对CPU、内存、IO、网络进行压力测试

一、对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/nulldone

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 )


(责任编辑:IT)