linux使用stress命令进行压力测试cpu、内存、磁盘
👨🎓博主简介
🏅CSDN博客专家
🏅云计算领域优质创作者
🏅华为云开发者社区专家博主
🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗
一、查看系统的压力(负载情况)
uptime或者使用top
top 显示动态的负载情况及cpu等等参数,参数比较多;
uptime 显示静态的负载情况,只能看到系统时间、启动时间、登陆用户、平均负载
[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
一分钟、五分钟、十五分钟负载
top

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

三、使用stress命令来做CPU、内存压测
cpu的压力,来自于高频的计算任务,比如数值计算等,我们可以用bash程序,python程序,以及各种编程语言,来实现复杂的高频率计算。
这里我们用几个工具
stress stress是一个linux的压力测试工具,专门用于对设备的CPU、IO、内存、负载、磁盘等进行压测
mpstat 多核CPU性能分析
pidstat 实时查看cpu、内存、io等指标
top 实时查看cpu、内存、负载、io等指标
3.1 安装stress命令
# 需要安装扩展源
yum -y install epel-release
# 安装stress命令
yum -y install stress
## ubuntu安装
apt install stress -y
3.2 stress命令解析
stress
是一个用于在 Linux 系统中模拟系统负载的工具,主要用于测试系统的稳定性和性能表现。它可以通过创建多个进程来模拟 CPU、内存、磁盘 I/O 和网络等资源的压力。
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
--cpu 4 指定要占满的cpu核数
--timeout 600s 指定超时(结束)时间,压测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后添加&
stress --cpu 4 &
这样即使链接服务器窗口关了也可以持续占用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
查看逻辑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 版本
示例图:
