文章目录
-
- [一、什么是 Linux 压力测试?要解决什么问题?](#一、什么是 Linux 压力测试?要解决什么问题?)
- 二、实际测试环境说明(案例)
- 三、压力测试前的必要检查(必须做)
-
- [3.1 查看硬件与系统基础信息](#3.1 查看硬件与系统基础信息)
- [3.2 查看当前系统负载](#3.2 查看当前系统负载)
- [四、CPU 压力测试(计算密集型场景)](#四、CPU 压力测试(计算密集型场景))
-
- [4.1 安装 stress 工具](#4.1 安装 stress 工具)
- [4.2 实际案例:压满 4 核 CPU 5 分钟](#4.2 实际案例:压满 4 核 CPU 5 分钟)
- [4.3 实时监控 CPU](#4.3 实时监控 CPU)
- 五、内存压力测试(最容易暴露隐患)
-
- [5.1 实际案例:模拟 6GB 内存占用](#5.1 实际案例:模拟 6GB 内存占用)
- [5.2 监控内存状态](#5.2 监控内存状态)
- [六、磁盘 IO 压力测试(最常被忽略)](#六、磁盘 IO 压力测试(最常被忽略))
-
- [6.1 安装 fio](#6.1 安装 fio)
- [6.2 实际案例:随机写 IO 压测](#6.2 实际案例:随机写 IO 压测)
- [6.3 实时查看 IO 指标](#6.3 实时查看 IO 指标)
- 七、接口压力测试(贴近真实业务)
-
- [7.1 安装 wrk](#7.1 安装 wrk)
- [7.2 实际案例:接口并发压测](#7.2 实际案例:接口并发压测)
- [7.3 重点关注指标](#7.3 重点关注指标)
- 八、压测时必须"同时"做的监控(否则无意义)
-
- [8.1 系统资源](#8.1 系统资源)
- [8.2 网络与连接数](#8.2 网络与连接数)
- [8.3 进程级资源占用](#8.3 进程级资源占用)
- 九、常见压测结果的判断经验(非常重要)
- 十、一次"合格的压测"应该输出什么?
- 十一、总结
很多同学说"系统我压过了",但一追问:
压的是什么?压到多少?瓶颈在哪?
往往回答不上来。
这篇文章,我用一个完整可复现的实际案例 ,带你在 Linux 环境 下,从 环境检查 → CPU / 内存 / IO / 接口压测 → 实时监控 → 结果判断,一步一步把压力测试真正做"实"。
一、什么是 Linux 压力测试?要解决什么问题?
Linux 压力测试不是为了把服务器打挂,而是为了回答 4 个问题:
- 这台机器 最大能扛多大压力
- 在高负载下 系统是慢、是错,还是直接挂
- 瓶颈出现在哪里(CPU / 内存 / IO / 网络 / 应用)
- 现有配置 是否满足生产需求
如果你不能明确回答以上问题,那你的压测大概率是无效的。
二、实际测试环境说明(案例)
本文所有操作基于如下真实环境(你可以按自己机器等比调整):
text
操作系统:CentOS 7 / Rocky Linux 8
CPU:4 核
内存:8 GB
磁盘:SSD
用户:root
⚠️ 强烈建议:
不要直接在生产环境做压力测试
三、压力测试前的必要检查(必须做)
3.1 查看硬件与系统基础信息
bash
lscpu
free -h
df -h
重点关注:
- CPU 核数
- 可用内存
- 磁盘是否已接近满载
3.2 查看当前系统负载
bash
uptime
top
如果:
- load average 已经长期 > CPU 核数
- CPU / 内存已经很高
👉 不建议立刻压测,结果不准确。
四、CPU 压力测试(计算密集型场景)
4.1 安装 stress 工具
bash
yum install -y stress
4.2 实际案例:压满 4 核 CPU 5 分钟
bash
stress --cpu 4 --timeout 300
参数说明:
--cpu 4:启动 4 个 CPU 压力进程--timeout 300:持续 300 秒
4.3 实时监控 CPU
bash
top
mpstat -P ALL 1
判断依据:
- CPU 是否接近 100%
- load average 是否接近或超过 CPU 核数
👉 如果 4 核机器 load > 6 且持续不降,说明 CPU 已进入瓶颈区。
五、内存压力测试(最容易暴露隐患)
5.1 实际案例:模拟 6GB 内存占用
bash
stress --vm 2 --vm-bytes 3G --vm-keep --timeout 300
含义:
- 启动 2 个内存进程
- 每个占用 3GB
- 不释放内存,模拟真实服务占用
5.2 监控内存状态
bash
free -h
vmstat 1
重点观察:
- available 是否快速下降
- swap 是否开始被使用
⚠️ 一旦大量使用 swap,说明内存配置或应用存在风险
六、磁盘 IO 压力测试(最常被忽略)
6.1 安装 fio
bash
yum install -y fio
6.2 实际案例:随机写 IO 压测
bash
fio --name=randwrite \
--ioengine=libaio \
--rw=randwrite \
--bs=4k \
--numjobs=4 \
--size=2G \
--runtime=300 \
--time_based \
--group_reporting
6.3 实时查看 IO 指标
bash
iostat -x 1
重点指标:
%util接近 100%:磁盘已满负载await很高:IO 延迟明显
👉 很多"CPU 不高但系统慢"的问题,最终都是 IO 瓶颈。
七、接口压力测试(贴近真实业务)
7.1 安装 wrk
bash
yum install -y wrk
7.2 实际案例:接口并发压测
bash
wrk -t4 -c200 -d300s http://127.0.0.1:8080/api/orders
参数解释:
-t4:4 个线程-c200:200 并发连接-d300s:持续 5 分钟
7.3 重点关注指标
wrk 输出中最重要的是:
- Requests/sec(吞吐)
- Latency(平均 / 最大延迟)
如果:
- 并发上升,延迟突然暴涨
👉 系统已到性能拐点。
八、压测时必须"同时"做的监控(否则无意义)
8.1 系统资源
bash
top
free -h
vmstat 1
iostat -x 1
8.2 网络与连接数
bash
ss -s
netstat -an | wc -l
8.3 进程级资源占用
bash
ps -eo pid,cmd,%cpu,%mem --sort=-%cpu | head
九、常见压测结果的判断经验(非常重要)
| 现象 | 常见原因 |
|---|---|
| CPU 不高但接口慢 | IO / DB / 外部依赖 |
| 内存持续上涨 | 内存泄漏 |
| load 很高但 CPU 空闲 | IO 阻塞 |
| 并发一高就 502 | 线程池 / 连接池不足 |
| QPS 上不去 | 单机容量已到上限 |
十、一次"合格的压测"应该输出什么?
建议压测结束后,至少总结以下内容:
- 最大稳定并发
- CPU / 内存 / IO 峰值
- 瓶颈触发点
- 异常表现(慢 / 错 / 挂)
- 后续优化方向
如果压完只有一句话:
"感觉还能扛"
那这次压测是不合格的。
十一、总结
压力测试是一套流程,而不是一条命令
真正有价值的 Linux 压力测试,一定是:
- 有目标
- 有监控
- 能定位瓶颈
- 能指导优化
这套方法同样适用于:
- 新系统上线前
- 容量评估
- 架构调整后的验证