https://cloud.tencent.com/developer/article/2129549
描述:Stress/Stress-NG是Linux下两个常用的系统级压力测试工具,stress命令简单易用stress-ng是stress的升级版,支持数百个参数定制各种压CPU、内存、IO、网络的姿势。在系统过载的场景下,应用服务可能会出现意想不到的错误或异常,在测试负载均衡和熔断降级时非常有用。 这里只列举了几个常用的命令,详细使用参考”stress-ng –help”或”man stress-ng”。另外这些"烤机"命令
来测试服务器性能也是不错的。
安装&语法:
# Install
RHRL/CentOS
yum install epel-release
yum install stress stress-ng
#Debian/Ubuntu
apt install stress stress-ng
# Syntax
# stress-ng 基本用法与stress完全兼容,但有更多的参数可选,并且可以查看统计信息;
基础实例:
#1.在两个CPU核心上跑开方运算,并且启动一个不断分配释放1G内存的线程,运行10秒后停止
stress --cpu 2 --vm 1 --vm-bytes 1G -v --timeout 120
#2.启动一个线程不断执行sync系统调用回写磁盘缓存,并且启动一个线程不停地写入删除512MB数据,运行10秒停止
stress --io 1 --hdd 1 --hdd-bytes 512M -v --timeout 10
#3.--sock 可以模拟大量的socket连接断开以及数据的发送接收等等
stress-ng --sock 2 -v --timeout 10 --metrics-brief
#4.Note: Numbers may be suffixed with s,m,h,d,y (time) or B,K,M,G (size).
Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s -v
Example: stress --cpu 24 --hdd 8 --hdd-bytes 1G --io 8 --vm 4 --vm-bytes 4G --timeout 1200s -v
WeiyiGeek.stress
描述:FIO是测试IOPS的非常好的工具(多线程或进程并执行
),用来对磁盘进行基准测试和压力测试以及硬件验证等运维场景。磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写
两大类 特点: 19种不同类型的I/O引擎sync,mmap,libaio,posixaio,SG v3,splice,null,network,syslet,guasi,solarisaio
等 用途:编写和模拟的I/O负载匹配的作业文件测试磁盘设备的性能和网络存储的IO测试; 官网地址: http://freshmeat.net/projects/fio/ 食用地址: https://github.com/axboe/fio
注意事项:千万不能在系统所在的分区测试硬盘性能
否则您将跑路;
如何安装fio?
yum install fio -y
Fio命令参数
filename=/dev/sdb1 #测试文件名称通常选择需要测试的盘的data目录(测试必须指定切勿在系统分区做测试会破坏系统分区而导致系统崩溃无法启动)
directory=/app/ #在根目录下创建一个空目录,在测试命令中使用directory参数指定该目录,而不使用filename参数。
direct=1 #使用directIO绕过OS自带的 buffer 使测试磁盘的结果更真实(bool类型)。
rw=read #read(顺序读)| randread(随机读) | write(顺序写) | randwrite (随机写) | randrw (混合随机读写模式) 5种方式
rwmixwrite=30 #在混合读写的模式下写占30%
rwmixread=70 #在混合读写的模式下写占70%
bs=16k #设置I/O block块文件大小为16k(默认4k)
bsrange=512-2048 #提定数据块的大小范围
name=jobname #任务的名称(且任务名称可以相同)
numjobs=1 #每个job(任务)开1个线程 最终线程数=任务数(几个name=jobx) * numjobs
size=5G #指定job处理的文件的大小及每个线程读写的数据量
runtime=1000 #指定在多少秒后停止进程,此处测试时间为1000秒
ioengine=libaio #I/O引擎选择(一共19种),默认值是sync同步阻塞I/O , libaio是Linux的本地native异步I/O。
iodepth=16 #队列的深度,如果ioengine采用异步方式,该参数表示一批提交保持的io单元数
lockmem=1g #使用1g内存进行测试。
nrfiles=8 #每个进程生成文件的数量。
time_based #如果在runtime指定的时间还没到时文件就被读写完成,将继续重复知道runtime时间结束。
thread #使用pthread_create创建线程,另一种是fork创建进程,由于进程的开销比线程要大所以一般都采用thread测试;
zero_buffers #用0初始化系统buffer。
group_reporting #当同时指定了numjobs了时,输出结果按组显示
磁盘读写常用测试点:
补充说明:
一般的raid卡何sas卡都带有缓存机制
)。读的时候也优先读缓存里的数据(速度可以加快),但是一旦掉电缓存里的数据就没了;所以有一种模式叫做DirectIO跳过缓存直接读写SSD
。基础实例:
#实例1.本地异步I/O 4k 块 不使用系统缓存 读测试 测试深度16 时间60s
$fio -filename=/dev/sdb/ -name="BS 4KB read test" -ioengine=libaio -direct=1 -thread -rw=read -size=1M -numjobs=16 -bs=4k -iodepth=16 -runtime=60 -time_based -group_reporting
$fio -directory=/app/ -name="BS 4KB read test" -ioengine=libaio -direct=1 -thread -rw=read -size=1M -numjobs=16 -bs=4k -iodepth=16 -runtime=60 -time_based -group_reporting
$fio --bs=4k --ioengine=libaio --iodepth=1 --direct=1 --rw=read --time_based --runtime=60 --refill_buffers --norandommap --randrepeat=0 --group_reporting --name=fio-read --size=500M --filename=/dev/sdb1
示例2.配置文件形式:fio.conf
#测试命令
fio fio.conf
cat > fio.comf <<END
[global]
ioengine=libaio
direct=1
thread=1
norandommap=1
randrepeat=0
runtime=60
ramp_time=6
size=1g
directory=/data
[read4k-rand]
stonewall
group_reporting
bs=4k
rw=randread
numjobs=8
iodepth=32
[read64k-seq]
stonewall
group_reporting
bs=64k
rw=read
numjobs=4
iodepth=8
[write4k-rand]
stonewall
group_reporting
bs=4k
rw=randwrite
numjobs=2
iodepth=4
[write64k-seq]
stonewall
group_reporting
bs=64k
rw=write
numjobs=2
iodepth=4
END
测试结果以及说明:
#测试2:
Jobs: 16 (f=16): [R(16)][100.0%][r=9941KiB/s,w=0KiB/s][r=2485,w=0 IOPS][eta 00m:00s]
BS 4KB read test: (groupid=0, jobs=16): err= 0: pid=2637: Tue Apr 28 21:27:01 2020
#读IOPS #BW=平均IO带宽 #runt=线程运行时间
read: IOPS=2457, BW=9830KiB/s (10.1MB/s)(577MiB/60060msec)
#slat=提交延迟,提交该IO请求到kernel所花的时间(不包括kernel处理的时间)
slat (nsec): min=1665, max=243925k, avg=5226953.48, stdev=13063402.61
#clat=完成延迟, 提交该IO请求到kernel后,处理所花的时间
clat (usec): min=85, max=698388, avg=98913.96, stdev=63432.35
#lat=响应时间
lat (usec): min=88, max=698392, avg=104141.19, stdev=67428.64
clat percentiles (msec):
| 1.00th=[ 41], 5.00th=[ 47], 10.00th=[ 50], 20.00th=[ 53],
| 30.00th=[ 56], 40.00th=[ 61], 50.00th=[ 77], 60.00th=[ 95],
| 70.00th=[ 114], 80.00th=[ 140], 90.00th=[ 182], 95.00th=[ 224],
| 99.00th=[ 326], 99.50th=[ 380], 99.90th=[