一、为什么必须做压测在讨论工具之前我们先明确一个核心问题压测的核心价值是什么真实工程场景中“系统慢”的排查往往陷入误区系统响应延迟 → 怀疑数据库性能 → 优化SQL、调整索引 → 重启服务后延迟依旧没有改善出现这种情况大概率是因为没有找到真正的瓶颈——可能是CPU已经被计算任务打满导致进程无法及时调度可能是磁盘IO读写阻塞数据库无法快速读取数据也可能是网络带宽耗尽请求无法正常传输甚至是内存不足触发swap导致系统性能断崖式下降。而压测就是解决这种“盲目排查”的关键其核心意义体现在4个方面找到系统极限明确系统在不同并发、不同负载下的性能上限如QPS、TPS、响应时间避免生产环境因突发流量导致系统崩溃。定位瓶颈组件精准识别性能瓶颈所在的硬件CPU、内存、磁盘、网络或软件组件数据库、中间件、应用服务为优化提供明确方向。验证架构设计检验系统架构是否符合预期比如分布式架构的负载均衡效果、缓存策略的有效性避免架构设计“纸上谈兵”。验证扩容策略提前测试扩容方案的有效性比如增加服务器节点、提升硬件配置后系统性能是否线性提升避免扩容后依旧出现性能瓶颈。一句话总结Without measurement, there is no optimization.没有测量就没有优化压测是系统性能工程的基础也是工程师必备的核心技能。二、Linux 压测工具全景图Linux 压测工具种类繁多但按照测试的资源维度可清晰划分为5大类覆盖全系统性能场景每类工具各有侧重工程师可根据实际需求灵活选择测试维度核心工具工具特点核心场景CPUstress-ng、sysbenchstress-ng功能最强支持多场景CPU压测sysbench适合对比不同机器性能CPU密集型任务如计算、编码性能测试内存stress-ng、memtesterstress-ng支持内存压力模拟memtester专注内存稳定性检测内存溢出、内存泄漏、硬件内存故障检测磁盘IOdd、fio、iopingdd最简单fio最专业支持复杂IO模型ioping专注延迟测试数据库、消息队列等IO密集型服务性能测试网络iperf3、netperf、sockperfiperf3最常用netperf更专业sockperf擅长微秒级延迟测试网络带宽、延迟、吞吐量测试分布式系统网络性能验证HTTPwrk、hey、ApacheBenchabwrk性能最优、推荐使用hey轻量ab经典但性能一般Web API、接口服务的并发、响应时间测试全系统stress-ng、sysbench一键压满CPU、内存、IO等全资源模拟极限负载系统整体性能极限测试、服务器硬件稳定性测试三、分维度压测工具详解含工程实战以下按资源维度详细讲解各核心工具的安装、使用方法、参数解读及实战技巧所有命令均经过生产环境验证可直接复制使用。3.1 CPU 压测工具CPU是系统的“计算核心”CPU瓶颈常见于计算密集型服务如大数据处理、机器学习、编码解码。以下两个工具覆盖绝大多数CPU压测场景其中 stress-ng 为首选。3.1.1 stress-ngCPU压测首选功能最强stress-ng 是 Linux 下功能最全面的压力测试工具支持CPU、内存、IO、网络等多维度压测稳定性强参数灵活可模拟各种极端负载场景是生产环境压测的首选工具。安装方法多系统适配Ubuntu/Debian 系统apt install stress-ng -yCentOS/RHEL 系统需先安装 EPEL 源再执行yum install stress-ng -yMac 系统brew install stress-ng核心用法CPU压测最常用命令模拟8核CPU满负载持续60秒stress-ng --cpu 8 --timeout 60参数解读--cpu 8启动8个CPU worker进程每个进程持续执行计算任务模拟8核CPU负载若服务器为4核可设为4避免超核导致的资源竞争。--timeout 60压测持续时间单位为秒60秒后自动停止压测。结果观察与分析压测过程中可通过以下命令观察CPU状态top实时查看CPU使用率若8核CPU满负载使用率约为800%每核100%。htop更直观的交互式界面可查看每个CPU核心的负载情况排查是否存在单核心瓶颈。实战技巧若需模拟CPU密集型场景如高并发计算可增加worker数量但需注意与服务器CPU核心数匹配避免过多进程导致上下文切换频繁影响压测准确性。3.1.2 sysbench CPU经典工具适合性能对比sysbench 是一款经典的多线程性能测试工具支持CPU、内存、数据库等多维度测试其CPU测试主要通过计算素数来模拟CPU负载适合对比不同服务器的CPU性能。安装方法Ubuntu/Debian 系统apt install sysbench -yCentOS/RHEL 系统yum install sysbench -y核心用法CPU压测sysbench cpu --cpu-max-prime20000 --threads8 run参数解读cpu指定测试模块为CPU。--cpu-max-prime20000指定素数计算的最大值值越大CPU计算压力越大测试时间越长。--threads8启动8个线程执行测试与CPU核心数匹配即可。run执行测试可替换为prepare准备环境、cleanup清理环境。输出结果解读关键指标CPU speed: events per second: 287.19 # 每秒完成的计算事件数数值越高CPU性能越强 General statistics: total time: 10.0155s # 测试总时间 total number of events: 2877 # 总计算事件数 Latency (ms): min: 16.19 # 最小延迟 avg: 27.81 # 平均延迟 max: 48.53 # 最大延迟 95th percentile: 32.53 # 95%请求的延迟核心指标反映绝大多数请求的性能 Threads fairness: events (avg/stddev): 359.6250/0.48 # 线程事件数的平均值和标准差标准差越小线程负载越均衡 execution time (avg/stddev): 10.0026/0.01 # 线程执行时间的平均值和标准差实战技巧使用sysbench CPU测试时建议保持--cpu-max-prime参数一致通过对比“events per second”指标可快速判断不同服务器的CPU性能差异。3.2 内存压测工具内存瓶颈常见于内存泄漏、内存不足、缓存过大等场景若内存不足触发swap内存与磁盘交换会导致系统性能急剧下降。以下工具可覆盖内存压力模拟和稳定性测试。3.2.1 stress-ng 内存压测首选模拟内存负载stress-ng 的内存压测功能可灵活模拟多进程内存占用支持指定每个进程的内存大小适合测试系统在高内存负载下的稳定性。核心用法模拟8G内存负载stress-ng --vm 4 --vm-bytes 2G --timeout 60参数解读--vm 4启动4个内存worker进程每个进程持续占用指定大小的内存。--vm-bytes 2G每个worker进程占用2G内存4个进程总占用约8G内存需确保服务器内存充足避免触发swap影响测试。--timeout 60压测持续60秒。结果观察使用free -h或top命令观察内存占用情况若内存占用接近设定值且无明显swap使用swap列数值无明显增长说明系统内存充足若出现大量swap说明内存不足需优化内存配置或扩容。3.2.2 memtester内存稳定性测试适合硬件检测memtester 是一款专门用于内存稳定性测试的工具通过向内存写入不同类型的数据再读取验证可检测内存硬件故障、内存泄漏等问题适合云服务器、物理机的内存硬件检测。安装方法Ubuntu/Debian 系统apt install memtester -yCentOS/RHEL 系统yum install memtester -y核心用法测试4GB内存循环5次memtester 4G 5参数解读4G指定测试的内存大小需小于服务器空闲内存避免触发swap。5测试循环次数次数越多测试越全面耗时越长。实战场景1. 新购买的物理机/云服务器可通过memtester测试内存硬件是否存在故障若测试过程中出现“errors detected”说明内存存在问题需更换硬件或联系云服务商。2. 排查内存泄漏问题若系统长期运行后内存占用持续增长可通过memtester测试内存稳定性排除硬件问题后再排查应用程序的内存泄漏。3.3 磁盘 IO 压测工具磁盘IO是很多系统的性能瓶颈尤其是数据库、消息队列MySQL、Kafka、Redis等IO密集型服务磁盘的读写速度、延迟直接影响系统响应性能。以下工具覆盖简单测试、专业测试和延迟测试。3.3.1 dd最简单的IO测试工具适合快速验证dd 是 Linux 自带的命令行工具可用于简单的磁盘读写速度测试操作简单无需额外安装但不支持复杂IO模型如随机读写适合快速验证磁盘基本性能。核心用法写入测试读取测试1. 写入测试向磁盘写入1个1G的文件测试写入速度dd if/dev/zero oftest.img bs1G count1 oflagdirect2. 读取测试读取刚才写入的文件测试读取速度dd iftest.img of/dev/null bs1G参数解读if/dev/zero输入源/dev/zero 是Linux的空字符设备可持续生成空字符用于写入测试。oftest.img输出文件即写入的目标文件。bs1G块大小即每次读写的大小1G表示每次读写1GB数据可根据需求调整为4k、1M等。count1读写次数即写入1个块总大小为 bs*count1GB。oflagdirect跳过系统缓存直接写入磁盘避免缓存影响测试结果核心参数确保测试的是真实磁盘性能。输出结果解读1.0 GB copied, 0.8 s, 1.3 GB/s其中1.3 GB/s即为磁盘写入/读取速度数值越高磁盘IO性能越强。缺点仅支持顺序读写无法模拟数据库、Kafka等服务的随机读写场景测试结果参考价值有限适合快速验证。3.3.2 fio最专业的IO压测工具生产环境首选fio 是 Linux 下功能最强大、最专业的IO压测工具支持顺序读写、随机读写、混合读写等多种IO模型可模拟MySQL、Kafka、Redis等不同服务的IO场景参数灵活是生产环境IO压测的首选工具。安装方法Ubuntu/Debian 系统apt install fio -yCentOS/RHEL 系统yum install fio -y核心用法随机读写测试模拟数据库场景fio --namerandrw --rwrandrw --bs4k --size1G --numjobs4 --runtime60 --group_reporting参数解读核心参数必记--namerandrw测试任务名称可自定义。--rwrandrwIO模型randrw表示随机读写常用值read顺序读、write顺序写、randread随机读、randwrite随机写。--bs4k块大小4k是数据库、Redis等服务的常见IO块大小可根据实际场景调整如Kafka常用16k。--size1G测试文件大小建议大于系统缓存大小避免缓存影响测试结果。--numjobs4启动4个进程执行测试模拟多并发IO场景。--runtime60压测持续时间60秒。--group_reporting按组输出测试结果避免每个进程单独输出更简洁。输出结果解读关键指标randrw: (g0): rwrandrw, bs(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioenginelibaio, iodepth1 fio-3.16 Starting 4 processes Jobs: 4 (f4): [m(4)] [100.0% done] [0B/0B/0B /s] [0/0/0 iops] [eta 00m:00s] randrw: (groupid0, jobs4): err 0: pid12345: Mon Mar 14 10:00:00 2026 read: IOPS25000, BW97.7MB/s (102MB/s) # 随机读IOPS和带宽 write: IOPS25000, BW97.7MB/s (102MB/s) # 随机写IOPS和带宽 total: IOPS50000, BW195MB/s (204MB/s) # 总IOPS和带宽核心指标 latency (ms): min0.02, avg0.15, max2.30, 95th0.30 cpu: usr2.00%, sys8.00%, ctx120000, majf0, minf0 IO depths: 1100.0%, 20.0%, 40.0%, 80.0%, 160.0%, 320.0%, 640.0% submit: 00.0%, 4100.0%, 80.0%, 160.0%, 320.0%, 640.0%, 640.0% complete: 00.0%, 4100.0%, 80.0%, 160.0%, 320.0%, 640.0%, 640.0% issued rwts: total122880,122880,0,0 short0,0,0,0 dropped0,0,0,0 latency: target0, window0, percentile100.00%, depth1关键指标说明IOPS每秒IO操作次数是磁盘IO性能的核心指标数值越高磁盘处理IO的能力越强数据库场景通常要求IOPS≥10000。BW带宽每秒读写数据量反映磁盘的传输速度。latency延迟IO操作的延迟95th percentile95%延迟是核心指标反映绝大多数IO操作的响应时间延迟越低越好。实战场景适配模拟MySQL场景fio --namemysql --rwrandrw --bs4k --size10G --numjobs8 --runtime120 --group_reporting4k块大小、随机读写模拟MySQL的行级读写。模拟Kafka场景fio --namekafka --rwwrite --bs16k --size20G --numjobs4 --runtime120 --group_reporting16k块大小、顺序写模拟Kafka的日志写入。3.3.3 ioping磁盘延迟测试快速判断磁盘响应ioping 是一款专门用于测试磁盘延迟的工具用法类似 ping 命令可实时测试磁盘的读写延迟适合快速判断磁盘是否存在延迟过高的问题。安装方法Ubuntu/Debian 系统apt install ioping -yCentOS/RHEL 系统yum install ioping -y核心用法测试当前目录所在磁盘的延迟ioping .输出结果解读4 KiB 4096 B requests ^C --- . (ext4 /dev/sda1) ioping statistics --- 100 requests completed in 99.8 ms, 400 KiB read, 1002 iops, 3.91 MiB/s generated 101 requests in 100.0 ms, 404 KiB, 1010 iops, 3.94 MiB/s min/avg/max/mdev 0.30/0.40/0.80/0.08 ms关键指标avg latency: 0.4 ms平均延迟正常机械硬盘延迟约为5-10ms固态硬盘SSD延迟约为0.1-1ms若延迟远超正常范围说明磁盘存在性能问题。3.4 网络压测工具网络瓶颈常见于分布式系统、高并发接口服务主要表现为带宽耗尽、延迟过高、吞吐量不足。以下工具覆盖带宽测试、延迟测试、吞吐量测试满足不同网络压测场景。3.4.1 iperf3最常用网络带宽测试首选iperf3 是一款轻量、高效的网络带宽测试工具支持TCP、UDP协议可测试网络的最大带宽、吞吐量是分布式系统网络性能验证的常用工具需在服务端和客户端同时运行。安装方法Ubuntu/Debian 系统apt install iperf3 -yCentOS/RHEL 系统yum install iperf3 -y核心用法TCP带宽测试1. 服务端接收数据需提前启动iperf3 -s2. 客户端发送数据连接服务端iperf3 -c server_ip参数解读-s以服务端模式运行。-c server_ip以客户端模式运行连接服务端的IP地址。可选参数-t 60测试持续60秒、-P 4启动4个并发连接。输出结果解读关键指标Connecting to host server_ip, port 5201 [ 5] local client_ip port 12345 connected to server_ip port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 1.10 GBytes 9.40 Gbits/sec 0 850 KBytes [ 5] 1.00-2.00 sec 1.12 GBytes 9.58 Gbits/sec 0 1.02 MBytes ... [ 5] 9.00-10.00 sec 1.11 GBytes 9.45 Gbits/sec 0 1.15 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 11.1 GBytes 9.45 Gbits/sec 0 sender [ 5] 0.00-10.00 sec 11.1 GBytes 9.45 Gbits/sec receiver关键指标Bitrate: 9.45 Gbits/sec网络带宽数值接近服务器网卡带宽如10G网卡理想带宽约为9.5 Gbits/sec说明网络带宽正常若远低于网卡带宽需排查网络链路、防火墙等问题。3.4.2 netperf更专业网络性能细节测试netperf 是一款比 iperf3 更专业的网络性能测试工具支持TCP、UDP协议可测试网络的吞吐量、延迟、并发连接数等细节指标适合深入分析网络性能问题。安装方法Ubuntu/Debian 系统apt install netperf -yCentOS/RHEL 系统yum install netperf -y核心用法1. TCP吞吐量测试服务端无需单独启动客户端自动触发netperf -H server_ip2. TCP延迟测试测试请求响应延迟netperf -H server_ip -t TCP_RR参数解读-H server_ip指定服务端IP地址。-t TCP_RR指定测试类型为TCP请求-响应模式用于测试网络延迟。实战场景适合排查分布式系统中“网络延迟过高”的问题通过 netperf 测试不同节点间的延迟定位延迟高的链路。3.4.3 sockperf延迟神器微秒级延迟测试sockperf 是一款专门用于测试网络微秒级延迟的工具适合对延迟敏感的场景如高频交易系统、高性能分布式计算可精准测量网络的往返延迟RTT精度远高于 iperf3、netperf。安装方法Ubuntu/Debian 系统apt install sockperf -yCentOS/RHEL 系统yum install sockperf -y核心用法1. 服务端sockperf server2. 客户端测试往返延迟sockperf client server_ip --time 60输出结果中avg latency即为平均往返延迟通常高频交易系统要求延迟低于100微秒。3.5 HTTP 压测工具Web接口压测HTTP压测是最常见的压测场景主要用于测试Web API、接口服务的并发能力、响应时间、QPS等指标以下工具覆盖不同需求其中 wrk 为首选。3.5.1 wrk最推荐高性能HTTP压测工具wrk 是一款高性能的HTTP压测工具基于多线程模型支持自定义脚本性能远高于 ab、hey适合高并发场景的接口压测是后端工程师最常用的HTTP压测工具。安装方法Ubuntu/Debian 系统需手动编译安装参考官方文档或通过apt install wrk -y部分版本支持。Mac 系统brew install wrk核心用法测试本地8080端口接口8线程、200并发、持续30秒wrk -t8 -c200 -d30s http://localhost:8080参数解读-t8启动8个测试线程。-c200模拟200个并发连接即同时有200个请求发送到接口。-d30s压测持续30秒。可选参数-s script.lua指定自定义脚本用于模拟POST请求、带请求头的请求等。输出结果解读关键指标Running 30s test http://localhost:8080 8 threads and 200 connections Thread Stats Avg Stdev Max /- Stdev Latency 3.00ms 0.50ms 10.00ms 85.00% Req/Sec 8.00k 0.80k 10.00k 75.00% 1919872 requests in 30.02s, 230.00MB read Requests/sec: 63955.73 # QPS每秒请求数核心指标 Transfer/sec: 7.66MB # 每秒数据传输量关键指标Requests/sec: 63955.73QPS即每秒处理的请求数数值越高接口并发能力越强Latency延迟平均延迟越低越好。实战技巧自定义脚本模拟POST请求创建 script.lua 文件内容如下模拟POST请求带请求头和请求体wrk.method POST wrk.headers[Content-Type] application/json wrk.body {username:test,password:123456}执行命令wrk -t8 -c200 -d30s -s script.lua http://localhost:8080/login3.5.2 heyGo版ab轻量易用hey 是用Go语言开发的HTTP压测工具轻量、易用支持POST、GET等多种请求方式性能优于 ab适合快速验证接口性能。安装方法Mac 系统brew install heyLinux 系统可从GitHub下载二进制文件直接执行。核心用法发送10万次请求200并发hey -n 100000 -c 200 http://localhost:8080参数解读-n为请求总数-c为并发数用法简单适合快速测试。3.5.3 ApacheBenchab经典工具性能一般ab 是 Apache 自带的HTTP压测工具历史悠久、用法简单但性能较低不适合高并发场景并发数超过1000时容易出现瓶颈适合简单的接口验证。核心用法发送10万次请求200并发ab -n 100000 -c 200 http://localhost:8080/缺点高并发下测试结果不准确且不支持复杂请求如带请求体的POST请求仅适合简单场景使用。3.6 全系统压力测试一键压满所有资源若需快速测试服务器的整体性能极限或验证服务器在极端负载下的稳定性可使用以下两个工具一键压满CPU、内存、IO等所有资源。3.6.1 stress-ng全系统压测首选stress-ng --cpu 8 --vm 4 --io 4 --timeout 60参数解读同时启动8个CPU worker、4个内存worker、4个IO worker持续压测60秒模拟CPU、内存、IO同时满负载的场景适合测试服务器的整体稳定性。3.6.2 sysbench 全系统压测sysbench --threads16 --time60 cpu run参数解读启动16个线程持续60秒同时压测CPU间接带动内存、IO负载适合快速验证服务器的整体性能。四、压测 性能分析组合专业工程师必备真正专业的工程师不会只做压测——压测的核心目的是“发现瓶颈”而瓶颈的定位需要结合性能分析工具。以下是生产环境最常用的“压测分析”组合可覆盖99%的性能问题排查场景。压测工具对应分析工具分析目的核心命令wrk/hey/abHTTP压测perf、top、htop排查接口压测时的CPU瓶颈perf top、topfioIO压测iostat分析磁盘IO瓶颈查看IO使用率、等待时间iostat -x 1每秒输出一次IO状态stress-ng全系统压测top、free、iostat、ss全面分析CPU、内存、IO、网络瓶颈top、free -h、iostat -x 1、ss -siperf3/sockperf网络压测ss、netstat排查网络连接、端口占用、带宽瓶颈ss -s、netstat -an