linux下的CPU、内存、磁盘IO、网络压力测试方法

linux下的CPU、内存、磁盘IO、网络压力测试方法汇总

一、CPU

Linux系统下对CPU进行压力测试的方法有很多,这里介绍两种比较常用的方法:

1、Stress

Stress是一个Posix系统下生成Cpu/Menory/IO/Disk负载的工具。是Unix类系统下的工作量和压力测试工具。它将对用户指定的CPU数量的I/O,内存和硬盘的负载并报告它检测到任何错误。可用于自动压力测试。

[Stress-1.0.4下载地址:](https://fossies.org/linux/privat/stress-1.0.4.tar.gz/

下载后,将stress-1.0.4.tar.gz复制到“/etc/local/src/”目录下:

执行以下命令安装:

#cd /usr/local/src
#tar -xzpvf stress-1.0.4.tar.gz
#cd stress-1.0.4
#./configure
#make
#make check
#make install
#make clean

使用Stress对CPU进行压测,在被测节点的其中一个终端中执行以下命令:

创建8个stress进程,持续时间600秒,模拟CPU在用户态使用率达到100%的场景。
stress --cpu 8 --timeout 600
创建100个io进程,持续时间600秒,模拟CPU在内核态使用率达到100%的场景。
stress  --io 100 --timeout 600
创建8个stress进程和100个io进程,持续时间600秒,模拟CPU在用户态和内核态总使用率达到100%的场景。
stress -c 8 -i 100 --verbose --timeout 600

然后在节点的另外一个终端中执行以下命令查看所有CPU的资源占用情况:

mpstat -P ALL 2

2、dd命令

dd是一个常见的命令行工具,创建多个dd进程持续读数据到null也可以达到对CPU进行压力测试的目的,在被测节点的其中一个终端中执行以下命令:

i=`cat /proc/cpuinfo |grep processor |wc -l` && seq $i|xargs -P $i -I {} bash -c 'echo 'CPU' {} 'running' && dd if=/dev/zero of=/dev/null'

然后在节点的另外一个终端中执行以下命令查看所有CPU的资源占用情况:

mpstat -P ALL 2

以上就是常用的两种CPU压力测试的方法介绍,使用Stress软件进行压测的好处是可以按照自己的要求选择不同的压测模式,缺点就是需要下载和安装软件包,而dd命令行工具一般的系统默认都自带了的,直接就能使用。

测试完成后使用kill命令结束所有dd进程即可:

killall dd

二、内存

1、Stress

stress 测试内存的时候,--vm-bytes 1G --vm-hang 100 这里2个参数是关键!!!!
--vm-bytes 表示malloc分配多少内存
--vm-hang 表示malloc分配的内存多少时间后在free()释放掉
--vm 指定进程数量,分配的内存总数为vm*vm-bytes
--timeout 持续时间

下面例子,就是创建5个进程,同时去malloc分配内存,并且保持100s后再释放内存:

stress --vm 5 --vm-bytes 1G --vm-hang 100 --timeout 100s

注意:在进行内存压测时,分配的内存总数不能超过节点的实际内存,否则命令会报错退出。

2、ramfs文件系统

ramfs文件系统是一个利用VFS自身结构形成的内存文件系统,RAMFS没有自己的文件存储结构,他的文件存储于page cache 中,VFS本质上可以看成一种给予内存的文件系统,它统一了文件在内核中的表示方式并对磁盘文件进行缓冲,这里我们是创建一个ramfs文件系统,然后写入一定大小的文件来模拟内存占用。

mkdir /tmp/mem
mount -t ramfs ramfs /tmp/mem/
开始写入文件到内存,写多少数据就占用多少内存
dd if=/dev/zero of=/tmp/mem/file bs=1024k count=2048
释放内存:
umount /tmp/mem/
rmdir /tmp/mem/

三、磁盘IO

1、Stress

参数说明:

-d --hdd forks 产生多个执行write()函数的进程
--hdd-bytes bytes 指定写的Bytes数,默认是1GB

例子:

stress --hdd 2 --hdd-bytes 3G --timeout 200

解释:--hdd 2:创建两个写进程。写入固定大小通过mkstemp()函数写入当前目录;你也可以指定向磁盘中写入固定大小的文件,这个文件通过调用mkstemp()产生并保存在当前目录下,默认是文件产生后就被执行unlink(清除)操作。

2、FIO工具

FIO是测试磁盘带宽和IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, network, syslet, guasi, solarisaio 等等。

顺序写:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=64k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

顺序读:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=read -ioengine=libaio -bs=64k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

随机写:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

随机读:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=10 -runtime=60 -group_reporting -name=mytest

混合随机读写:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=4k -size=200m -numjobs=10 -runtime=60 -group_reporting -name=mytest

混合读写:

fio -filename=test_file -direct=1 -iodepth 1 -thread -rw=rw -rwmixread=70 -ioengine=libaio -bs=4k -size=200m -numjobs=10 -runtime=60 -group_reporting -name=mytest

四、网络

iperf或iperf3

Iperf是一款基于TCP/IP和UDP/IP的网络性能测试工具,它可以用来测量网络带宽和网络质量,还可以提供网络延迟抖动、数据包丢失率、最大传输单元等统计信息。网络管理员可以根据这些信息了解并判断网络性能问题,从而定位网络瓶颈,解决网络故障。

示例:

服务端运行:
iperf -u -s
# -u表示以udp模式运行(不加该参数,默认是以tcp模式运行),-s表示作为服务端

客户端运行:
iperf -u -c 192.168.30.115 -b 100M -t 60 -i 2
# 解释:在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.30.115上传带宽测试,测试时间为60秒

iperf -c 192.168.30.115 -u -i 1 -t 10 -b 2M -P 2
# 解释:客户端同时向服务器端发起2个连接线程,每个连接线程以2Mbps为数据发送速率,测试时间为10秒

iperf -u -c 192.168.30.115 -b 1000M -d -t 60 -i 1  
# 解释:以1000M为数据发送速率,进行上下行带宽测试,测试时间60秒,每秒显示一次结果

测试结果说明:

[ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams
[  3]  0.0-35.9 sec   449 MBytes   105 Mbits/sec   0.008 ms    0/320339 (0%)

从左至右依次为: 线程id 记录时间 接收数据大小 每秒大小 延时 丢包/总包 丢包率

posted @ 2022-03-05 10:37  xzy186  阅读(9891)  评论(0编辑  收藏  举报