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 压力测试,一定是:

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

这套方法同样适用于:

  • 新系统上线前
  • 容量评估
  • 架构调整后的验证
相关推荐
大树881 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 小时前
Linux 11 动态监控指令top
linux
Inhand陈工3 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩3 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_3 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈3 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix