Linux 压力测试实战操作手册:从环境准备到瓶颈定位的完整流程

文章目录

很多同学说"系统我压过了",但一追问:

压的是什么?压到多少?瓶颈在哪?

往往回答不上来。

这篇文章,我用一个完整可复现的实际案例 ,带你在 Linux 环境 下,从 环境检查 → CPU / 内存 / IO / 接口压测 → 实时监控 → 结果判断,一步一步把压力测试真正做"实"。


一、什么是 Linux 压力测试?要解决什么问题?

Linux 压力测试不是为了把服务器打挂,而是为了回答 4 个问题:

  1. 这台机器 最大能扛多大压力
  2. 在高负载下 系统是慢、是错,还是直接挂
  3. 瓶颈出现在哪里(CPU / 内存 / IO / 网络 / 应用)
  4. 现有配置 是否满足生产需求

如果你不能明确回答以上问题,那你的压测大概率是无效的


二、实际测试环境说明(案例)

本文所有操作基于如下真实环境(你可以按自己机器等比调整):

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 上不去 单机容量已到上限

十、一次"合格的压测"应该输出什么?

建议压测结束后,至少总结以下内容:

  1. 最大稳定并发
  2. CPU / 内存 / IO 峰值
  3. 瓶颈触发点
  4. 异常表现(慢 / 错 / 挂)
  5. 后续优化方向

如果压完只有一句话:

"感觉还能扛"

那这次压测是不合格的


十一、总结

压力测试是一套流程,而不是一条命令

真正有价值的 Linux 压力测试,一定是:

  • 有目标
  • 有监控
  • 能定位瓶颈
  • 能指导优化

这套方法同样适用于:

  • 新系统上线前
  • 容量评估
  • 架构调整后的验证
相关推荐
Run_Teenage5 小时前
Linux:深刻理解缓冲区
linux
youxiao_905 小时前
kubernetes 概念与安装(一)
linux·运维·服务器
凡梦千华5 小时前
logrotate日志切割
linux·运维·服务器
wdfk_prog5 小时前
[Linux]学习笔记系列 -- [fs][proc]
linux·笔记·学习
ELI_He9996 小时前
Airflow docker 部署
运维·docker·容器
拜托啦!狮子6 小时前
安装和使用Homer(linux)
linux·运维·服务器
liulilittle6 小时前
XDP VNP虚拟以太网关(章节:一)
linux·服务器·开发语言·网络·c++·通信·xdp
Sapphire~6 小时前
Linux-13 火狐浏览器书签丢失解决
linux
不染尘.6 小时前
进程切换和线程调度
linux·数据结构·windows·缓存
剑之所向7 小时前
c# modbus大小端
linux·运维·网络