Linux系统压力测试实战指南
在系统调优、应用部署或硬件评估时,了解一个系统在极限负载下的表现至关重要。压力测试(Stress Testing)正是为此而生,它可以帮助我们发现性能瓶颈、验证系统稳定性、评估散热效率,并为容量规划提供数据支持。
本文将详细介绍如何在 Rocky Linux 8.x 系统上,使用功能强大的 stress-ng
工具对 CPU、内存和磁盘等核心组件进行压力测试。
核心警告:请勿在生产环境操作!
重要!重要!重要!
压力测试会极大地消耗系统资源,可能导致服务中断或系统意外重启。请务必在专门的测试环境、虚拟机或非关键业务的机器上执行以下所有操作。
第一步:整装待发 —— 安装必备工具
我们需要一个主力压测工具和几个得力的监控助手。stress-ng
是我们的不二之选,它能模拟几乎所有类型的系统负载。
打开您的终端,执行以下命令安装所有必要的软件包:
1 | # 首先,启用 EPEL 仓库,因为 stress-ng 在其中 |
stress-ng
: 我们的主角,一个功能极其丰富的压力测试工具。sysstat
: 提供iostat
、sar
等经典的系统性能监控工具。htop
: 一个比top
更直观、更友好的实时进程查看器。
第二步:极限挑战 —— 逐项进行压力测试
现在,我们将对系统的核心组件施加压力,并使用命令行工具实时观察其性能表现。在每个测试开始后,建议您打开 另一个终端窗口 来运行监控命令。
场景一:CPU 核心全开 (目标: 压满 CPU 使用率)
目的: 将所有 CPU 核心推向极限,观察系统在高计算负载下的响应和稳定性。
执行压力测试命令:
此命令会启动与您 CPU 核心数相等的“工人”进程,每个进程都在执行高强度的计算任务。我们设置一个 2 分钟的超时,以便测试自动结束。1
2# 使用与 CPU 核心数相同的 worker 数量,持续 120 秒
stress-ng --cpu $(nproc) --timeout 120s--cpu $(nproc)
: 对 CPU 进行压测,$(nproc)
会自动获取系统的核心数。--timeout 120s
: 测试在 120 秒后自动结束,这是一个很好的安全措施。
实时监控 (在另一个终端中):
htop
视图:运行htop
,您会看到顶部的 CPU 状态条几乎被填满,每个核心的使用率都飙升到接近 100%。sar
精确数据:运行sar -u 1
,关注%user
+%system
的总和,它应该会远超 90%。
观察点: 您可以观察到 CPU 使用率飙升,并藉此评估系统的散热能力和高负载下的稳定性。
场景二:榨干系统内存 (目标: 模拟高内存消耗)
目的: 模拟内存资源被大量占用的场景,测试系统在内存压力下的表现,例如是否会触发 OOM Killer(Out of Memory Killer)。
执行压力测试命令:
此命令将尝试分配并使用系统总内存的 95%,同样在 2 分钟后自动释放。1
2# 启动1个 worker,分配系统 95% 的内存,持续 120 秒
stress-ng --vm 1 --vm-bytes 95% --timeout 120s--vm 1
: 进行内存 (Virtual Memory) 压测。--vm-bytes 95%
: 指定分配内存的大小为总内存的 95%,非常方便。- 注意:如果您的测试机内存较小(如<4GB),可以适当调低百分比,例如
90%
,以防系统完全无响应。
实时监控 (在另一个终端中):
free
命令:运行watch free -h
,您会看到used
(已用) 列急剧上升,而available
(可用) 列急剧下降。htop
视图:htop
顶部的内存(Mem)和交换(Swp)状态条会清晰地显示内存被大量占用。
观察点: 您会看到可用内存急剧减少,系统可能会开始使用交换空间(Swap)。这是测试应用程序在低内存环境下行为的好方法。
场景三:让磁盘“跑起来” (目标: 测试磁盘 I/O 极限)
目的: 对存储设备进行高强度读写,测试其 I/O 吞吐量和响应能力。
执行压力测试命令:
为了安全,我们通常在/tmp
目录下进行 I/O 测试。1
2
3
4
5# 切换到临时目录
cd /tmp
# 启动 4 个 worker 进行高强度 I/O 操作,持续 120 秒
stress-ng --io 4 --timeout 120s--io 4
: 进行 I/O 混合读写测试,4 个 worker 通常能产生足够大的压力。您可以增加此数值以提高负载。
实时监控 (在另一个终端中):
iostat
是最佳工具:运行iostat -xz 1
。在输出中找到您的主磁盘(如sda
,vda
,nvme0n1
),然后紧盯%util
这一列。在测试期间,这个值会迅速接近 100%。
观察点: 通过 iostat
,您可以看到磁盘的 %util
指标接近 100%,这表明磁盘正在全力工作。您可以藉此评估磁盘的 I/O 性能上限。
场景四:模拟磁盘空间耗尽
目的: 快速填充磁盘分区,用于测试依赖于磁盘空间的应用程序(如数据库、日志系统)在磁盘即将写满时的行为。
检查可用空间:
使用df -h
确定一个目标分区(例如根分区/
)及其可用空间。创建“占位”大文件:
假设/
分区有 10GB 可用空间,我们想测试其被占满的情况。fallocate
命令可以瞬间创建一个指定大小的文件。1
2
3
4
5
6# 在 /tmp 目录下创建一个 9GB 的文件
# 警告:请根据你的实际可用空间调整大小!
sudo fallocate -l 9G /large_test_file
# 再次检查空间使用率
df -h您会看到
/
分区的Use%
(使用率) 显著上升。清理现场(非常重要!):
测试完成后, 务必删除测试文件 以释放空间。1
sudo rm /large_test_file
总结:压力测试速查表
测试目标 | 核心命令 | 监控命令 | 关键指标 |
---|---|---|---|
压满 CPU | stress-ng --cpu $(nproc) --timeout 120s |
htop 或 sar -u 1 |
sar 中的 %user + %system |
消耗内存 | stress-ng --vm 1 --vm-bytes 95% --timeout 120s |
watch free -h 或 htop |
free 中的 used/total |
高磁盘I/O | stress-ng --io 4 --timeout 120s (在/tmp下) |
iostat -xz 1 |
iostat 中的 %util |
填充磁盘空间 | sudo fallocate -l <size> /<mount>/file |
df -h |
df 中的 Use% |
通过这套简单而有效的流程,您可以主动地了解您 Linux 系统的性能边界,为后续的优化和维护工作打下坚实的基础。