【Linux压力测试工具】 - Stress命令进行压力测试cpu、内存、磁盘
一、查看系统的压力(负载情况)
[root@localhost ~]# uptime
13:22:51 up 3 days, 22:43, 1 user, load average: 0.00, 0.01, 0.05
13:22:51
系统时间
up 3 days, 22:43
系统启动时长
1 user
登陆用户
load average: 0.00, 0.01, 0.05
一分钟、五分钟、十五分钟负载

二、如何直接做压力测试呢?
开两个窗口,一个窗口写while死循环来持续观看,一个窗口用来检测负载
while true;do echo "压力测试" ; done
可以看到都有占用,只不过每个cpu都没有占满,所以不推荐使用这个来做压测。

三、使用stress命令来做CPU、内存压测
cpu的压力,来自于高频的计算任务,比如数值计算等,我们可以用bash程序,python程序,以及各种编程语言,来实现复杂的高频率计算。
这里我们用几个工具
3.1 安装stress命令
# 需要安装扩展源
yum -y install epel-release
# 安装stress命令
yum -y install stress
## ubuntu安装
apt install stress -y
3.2.1 基本语法
stress [options]
3.2.2 常用选项
CPU 压力测试
-c, --cpu <N>:创建 N 个进程,每个进程通过计算随机数的平方根来占用 CPU。
示例:stress --cpu 4,模拟 4 个 CPU 核心的满负荷运行。
内存压力测试
-m, --vm <N>:创建 N 个进程,每个进程不断分配和释放内存。
--vm-bytes <B>:指定每个进程分配的内存大小。
--vm-keep:持续占用内存,而不是不断释放和重新分配。
示例:stress --vm 1 --vm-bytes 2048M --vm-keep,创建 1 个进程,每个进程分配 2048MB 内存并持续占用。
磁盘 I/O 压力测试
-i, --io <N>:创建 N 个进程,每个进程通过调用 sync() 将内存内容写入磁盘。
示例:stress --io 4,模拟 4 个磁盘 I/O 进程。
磁盘压力测试
-d, --hdd <N>:创建 N 个进程,每个进程不断在磁盘上创建文件、写入内容并删除文件。
--hdd-bytes <B>:指定创建文件的大小。
其他选项
--timeout <N>:指定压力测试的持续时间(单位为秒)。
-v, --verbose:输出详细的调试信息。
-q, --quiet:不输出任何信息。
--backoff <N>:在进程启动时延迟 N 微秒。
3.2.3 使用场景
系统稳定性测试:在系统升级或部署新应用前,使用 stress 测试系统在高负载下的稳定性。
性能评估:通过模拟不同类型的负载,评估系统的性能瓶颈。
故障排查:帮助确定系统在特定负载下出现的问题是硬件还是软件引起的。
通过合理使用 stress 命令,可以有效地对系统进行压力测试,从而优化系统性能和稳定性。
3.3 实践:
3.3.1 跑满4核cpu持续600s
开两个窗口;一个执行命;一个用来检测查看cpu占用。
stress --cpu 4 --timeout 600s
可以看到4核cpu都占用了100%。

- 3.3.1.1 在使用stress命令占满四个cpu来测试,我要跑5个cpu,但实际上服务器只有4核cpu,会怎么样呢?我们一起来看看:
stress --cpu 5 --timeout 600s
开两个窗口;一个执行命;,一个用来检测查看cpu占用。
跑了5个cpu

可以看到4核cpu也是占满了,但是,我们跑了5个压力测试,他会平均分摊cpu的处理核数,并使其占满所有cpu。

3.3.2 跑满4核cpu并挂后台持续占用
开两个窗口;一个执行命;一个用来检测查看cpu占用。
stress --cpu 4
不加timeout就行。
如果想挂载后台一直让他运行就可以在指定cpu后添加&
这样即使链接服务器窗口关了也可以持续占用cpu。
3.3.3 跑满4核cpu、2G内存并一直压测
stress --cpu 4 --vm 1 --vm-bytes 2G --vm-keep
--cpu 4 指定占用4cpu
--vm 1 指定使用1个进程
--vm-bytes 2G 指定每个进程分配的内存大小2G
--vm-keep 持续占用内存
注意事项:
系统资源限制:
在运行此命令之前,请确保系统有足够的资源来支持这种负载。如果系统资源不足,可能会导致系统崩溃或响应缓慢。
监控系统状态:
在运行压力测试时,建议使用工具(如 top、htop、vmstat 或 iostat)监控系统的 CPU、内存和磁盘使用情况,以便及时发现潜在问题。
测试环境:
建议在测试环境中运行此命令,避免对生产环境造成不必要的影响。
停止压力测试:
如果需要停止压力测试,可以使用 Ctrl+C 或通过 kill 命令终止 stress 进程。
3.3.4 例如:我有96线程cpu、118G内存,需要cpu占用30%、内存50%
要实现 CPU 占用 30% 和内存占用 50% 的压力测试,需要根据你的系统资源进行一些计算和调整。以下是具体的步骤和命令:
首先计算 CPU 和内存的使用量
CPU 占用 30%:
有 96 个线程的 CPU,30% 的占用意味着需要占用约 28.8 个线程(96 × 30%)。为了方便,可以取整为 29 个线程。
内存占用 50%:
有 118GB 内存,50% 的占用意味着需要占用约 59GB 内存。
stress --cpu 29 --vm 1 --vm-bytes 59G --vm-keep
命令解析:
--cpu 29 创建 29 个进程,每个进程通过计算随机数的平方根来占用 CPU,总共占用约 30% 的 CPU 资源。
--vm 1 创建 1 个进程用于内存压力测试。
--vm-bytes 59G 指定内存进程分配 59GB 的内存。
--vm-keep 让内存进程持续占用分配的内存,而不是不断释放和重新分配。
3.4.5 停止压测
①、如果是挂后台压测的话可以使用此命令停止压测。
ps -ef | grep -v grep | grep stress | awk '{print $2}' | xargs kill -9
②、如果是前台压测,直接ctrl+c停止压测。
附加:
Linux查看CPU详细信息
cat /proc/cpuinfo
lscpu
Linux查看CPU型号(去重)
cat /proc/cpuinfo | grep 'model name' |uniq
查看服务器共有多少核的时候需要先查看cpu多少块,在查看cpu核数,如是2块4核的一共就是8核cpu;
查看物理cpu个数【多少块cpu】
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
查看cpu是几核
cat /proc/cpuinfo | grep 'cpu cores'|uniq
cat /proc/cpuinfo | grep 'cores'|uniq
nproc
查看逻辑cpu的个数【线程】
cat /proc/cpuinfo | grep 'processor' |wc -l
推荐
如果想直观的查看系统的一些硬件信息,可使用该脚本,执行脚本自动获取部分系统硬件信息;
自动获取服务器的信息都有:
1、服务器为物理机还是虚拟机还是KVM还是云服务器,型号是什么;
2、操作系统
3、系统内核
4、系统架构
5、CPU型号
6、CPU核数
7、显卡型号
8、显卡显存
9、总内存
10、jdk版本
11、mysql 版本
12、redis 版本
13、python 版本
14、GCC 版本
15、CUDA 版本
示例图:
