linux下的CPU、内存、IO、网络的压力测试工具与方法介绍

 

一、对CPU进行简单测试:

1、通过bc命令计算特别函数

例:计算圆周率

echo "scale=5000; 4*a(1)" | bc -l -q

2.我工作中一般用一个死循环进行cpu占用,这样可以比较持续,简单粗暴的进行~~

 while [ 1 ]
  do
    echo 1 >> /dev/null  
  done

或者 while [ 1 ];do : ;done 

如果多核那么多执行几次~~

 

二、对内存进行简单测试:

方式一:

工具:memtester
官方:http://pyropus.ca/software/memtester/
用法:Usage: ./memtester [-p physaddrbase [-d device]] [B|K|M|G] [loops]
 

方式二:

做一些应用的启动,文件的读写测试 来模拟

 

三、对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还可以多机并发测试,有兴趣的可以了解一下

 

参数:

针对文件系统的测试可以按一下几项执行操作:

例:iozone -a -n 512m -g 4g -i 0 -i 1 -i 5 -f /mnt/iozone  -c -C -+k -+n  -e -Rb ./iozone.xls

进行全面测试.最小测试文件为512M直到测试到4G.测试read,write,和Strided Read.测试的地方在mnt下。生成Excel的文件

要验证正确性的话,可以加上 -+d

 

 

使用的脚本:

#!/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 1.1.1.1 -n 100000
-r 单独进行双向传输测试
-t 测试时间,默认10秒,eg:iperf -c 1.1.1.1 -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/

 

 

其他服务器协议性能或者压力

可以使用开源的jmeter 下次再做介绍

 

 

 

你可能感兴趣的:(Linux)