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

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

这套方法同样适用于:

  • 新系统上线前
  • 容量评估
  • 架构调整后的验证
相关推荐
名字还没想好☜7 小时前
用 systemd 托管后台服务:Restart 策略、日志接管、资源限制与开机自启全踩一遍
运维·docker·kubernetes
乌恩大侠8 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
tangwangbi8 小时前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
蜀道山老天师8 小时前
Shell Bash变量与运算符(含条件测试与流程控制)
linux·运维·bash
Mr.朱鹏8 小时前
Linux 服务器 LVM 根分区在线动态扩容
linux·服务器·数据库
草邦设计开发团队_媒体资源平台8 小时前
GEO 信源整合一键发布软文:从内容生产到流量获客的自动化实践
运维·人工智能·自动化
zhou lily8 小时前
非标自动化管理系统ERP如何选?2026年10大ERP软件对比分析
运维·自动化
mengge.cloud9 小时前
存储技术基础小白教程
linux·运维·服务器·wpf·存储
云贝贝贝9 小时前
腾讯云 TDSQL(MySQL 版)运维高频 6 坑:代理路由、读写分离、分片键、监控、PITR
运维·mysql·腾讯云
小五传输9 小时前
FTP替代怎么做?医院文件安全传输选型与迁移指南
大数据·运维·安全