Linux性能测试工具与方法大全(CPU/内存/磁盘/网络)

Linux性能测试工具与方法大全(CPU/内存/磁盘/网络)

本指南涵盖 Linux 系统 CPU、内存、磁盘 I/O、网络及综合负载等核心维度的性能测试方法,整合了命令行实用工具与系统化压测方案,适配 CentOS、Ubuntu、Debian 等主流发行版。内容从测试基本原则、各组件专项测试,到综合性能评估、压力稳定性验证及瓶颈定位分析,形成 “监控 - 基准 - 压力 - 分析 - 优化” 的全链路实操体系。每个测试方法均配套详细安装命令与执行步骤,兼顾新手入门与资深运维的使用需求,可帮助快速定位系统瓶颈、评估硬件 / 系统承载能力,为系统优化提供数据支撑。

一、性能测试的基本原则与目标

1. 明确测试目标

  • 基准测试(Benchmark):获取系统在标准条件下的基础性能指标,作为后续对比的参考基准。
  • 压力测试(Stress Test):在极限负载下验证系统稳定性,精准定位性能瓶颈点(如 CPU 上限、内存阈值、I/O 瓶颈)。
  • 负载测试(Load Test):模拟实际业务场景的负载强度,验证系统在真实业务压力下的承载能力与响应表现。

2. 测试环境准备

  • 关闭不必要的服务与后台应用,减少无关进程对测试结果的干扰。
  • 测试期间确保无其他高负载任务运行,保持环境一致性。
  • 同一测试用例需多次执行,取平均值作为最终结果,避免单次测试的偶然性。
  • 详细记录测试前后的系统状态,可通过 uptimefree -miostatvmstat 等命令采集基础数据。

二、CPU 性能测试

1. 基础监控命令

实时查看 CPU 运行状态,快速判断 CPU 负载情况:
top              # 实时查看 CPU 整体占用、进程占用排行
htop             # 更友好的交互界面(需额外安装)
mpstat -P ALL 1  # 查看每个 CPU 核心的详细使用率(每秒输出1次)
sar -u 1 5       # 收集 CPU 利用率历史数据(每秒1次,共5次)

2. 专用基准测试工具

(1)sysbench(通用性能测试工具)

支持多维度测试,CPU 测试通过计算质数验证运算能力:
# 安装命令
yum install sysbench -y   # CentOS/RHEL 系列
apt install sysbench -y   # Ubuntu/Debian 系列

# CPU 测试(线程数=逻辑核数,持续60秒)
sysbench cpu --threads=$(nproc) --time=60 run

(2)stress /stress-ng(压力测试工具)

模拟 CPU 满负载运行,验证系统在极限压力下的稳定性:
# 安装 stress
yum install stress -y   # CentOS
apt install stress -y   # Ubuntu

# 让4个 CPU 核心满载运行60秒(根据实际核心数调整)
stress --cpu 4 --timeout 60s

(3)Geekbench(跨平台综合测试)

跨平台性能测试工具,可获取单核 / 多核性能分数,便于横向对比:
  1. 从 Geekbench 官网 下载对应 Linux 版本的二进制包;
  2. 解压后直接运行可执行文件,自动完成测试并输出分数。

三、内存性能测试

1. 基础监控命令

查看内存使用、虚拟内存状态,判断内存是否充足:
free -h              # 以人性化格式显示内存使用情况
cat /proc/meminfo    # 查看详细内存参数(如缓存、交换分区、内存碎片)
vmstat 1 5           # 虚拟内存统计(每秒1次,共5次)
sar -r 1 5           # 内存利用率统计(每秒1次,共5次)

2. 内存带宽与延迟测试

(1)stream(经典内存带宽测试)

通过 Copy、Scale、Add、Triad 四种操作测试内存带宽,需源码编译:
# 下载源码
wget https://www.cs.virginia.edu/stream/FTP/Code/stream.c

# 编译(-O3 优化,-march=native 适配本地CPU架构)
gcc -O3 -march=native stream.c -o stream

# 执行测试
./stream
测试结果重点关注 Copy、Scale、Add、Triad 四项操作的带宽值(单位:MB/s),数值越高说明内存带宽越好。

(2)memtest86+(硬件级内存检测

专注于内存硬件稳定性检测,可发现内存坏道、电压异常等隐患,非性能基准测试工具:
  1. 下载镜像文件制作启动 U 盘;
  2. 从 U 盘启动系统,自动执行内存检测(建议完整运行 1-2 轮)。

(3)sysbench 内存测试

模拟内存读写操作,验证内存并发处理能力:
sysbench memory \
--memory-block-size=1K \  # 内存块大小
--memory-total-size=100G \ # 总测试数据量
--threads=4 \              # 并发线程数
run

四、磁盘 I/O 性能测试

1. 基础监控命令

实时监控磁盘空间、I/O 负载,定位高 I/O 进程:
df -h                    # 查看磁盘分区空间使用情况
iostat -xz 1             # 磁盘 I/O 详细统计(每秒1次,含读写速度、利用率)
iotop                    # 实时查看进程 I/O 占用(需安装)
dstat -d --disk-util     # 可视化磁盘利用率

2. 文件系统基准测试

(1)dd(简单顺序读写测试)

系统自带工具,快速测试磁盘顺序读写性能(注意:写测试会覆盖目标文件):
# 顺序写测试(直接 I/O,避免缓存干扰)
dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct

# 顺序读测试(直接 I/O)
dd if=/tmp/test of=/dev/null bs=1M iflag=direct

# 测试完成后删除临时文件
rm -f /tmp/test
关键指标:speed(读写速度,单位:MB/s),数值越高性能越好。

(2)fio(灵活强大的 I/O 测试工具)

支持随机读写、顺序读写、并发 I/O 等多种场景,是磁盘性能测试的首选工具:
# 安装 fio
yum install fio -y   # CentOS
apt install fio -y   # Ubuntu

# 随机读测试(4K 块,4线程,1G 测试文件,持续60秒)
fio --name=randread \
--ioengine=libaio \   # I/O 引擎(Linux 推荐 libaio)
--filename=/tmp/fio_test \ # 测试文件(需确保所在分区空间充足)
--rw=randread \       # 测试模式(randread=随机读,randwrite=随机写)
--bs=4k \             # 块大小
--numjobs=4 \         # 并发线程数
--size=1G \           # 测试文件大小
--runtime=60 \        # 测试时长
--group_reporting     # 汇总输出结果

# 随机写测试(参数含义同上,仅修改 rw 为 randwrite)
fio --name=randwrite --ioengine=libaio --filename=/tmp/fio_test --rw=randwrite --bs=4k --numjobs=4 --size=1G --runtime=60 --group_reporting

# 清理测试文件
rm -f /tmp/fio_test

(3)hdparm(磁盘读取速度测试)

快速测试磁盘缓存读取和直接读取速度:
hdparm -tT /dev/sda  # /dev/sda 为目标磁盘(根据实际情况替换
结果中 Timing cached reads 为缓存读取速度,Timing buffered disk reads 为直接读取速度。

五、网络性能测试

1. 基础监控命令

查看网卡流量、连接状态,实时监控网络负载:
ip -s link              # 查看各网卡收发流量统计
iftop                   # 实时监控网络带宽占用(需安装)
nload                   # 可视化网卡进出流量(需安装)
sar -n DEV 1 5          # 网络接口流量统计(每秒1次,共5次)
ss -tulnp               # 查看当前监听端口与连接状态

2. 网络吞吐与延迟测试

(1)iperf3(TCP/UDP 带宽测试)

跨平台网络带宽测试工具,需在服务端与客户端配合使用:
# 服务端(接收数据,监听默认端口5201)
iperf3 -s

# 客户端(连接服务端,测试30秒)
iperf3 -c server_ip -t 30  # server_ip 替换为服务端实际IP

# UDP 带宽测试(客户端添加 -u 参数)
iperf3 -c server_ip -t 30 -u
关键指标:Bits/sec(带宽,单位:Gbit/s 或 Mbit/s),TCP 测试关注吞吐量,UDP 测试关注丢包率。

(2)netperf(多种网络性能测试)

支持 TCP_STREAM、UDP_STREAM、TCP_RR 等多种测试模式,适合深度网络性能分析,需编译安装:
  1. 从 netperf 官网 下载源码;
  2. 编译安装:./configure && make && make install
  3. 示例(TCP 吞吐量测试):服务端 netserver,客户端 netperf -H server_ip -t TCP_STREAM

(3)ping /mtr(延迟与丢包测试)

测试网络延迟、丢包率,定位网络链路问题:
# ping 测试(发送100个数据包,测试延迟与丢包)
ping -c 100 target_ip  # target_ip 为目标地址

# mtr 综合测试(结合 ping 与 traceroute,查看链路各节点状态)
mtr --report target_ip

(4)HTTP 压力测试(模拟 Web 服务)

使用 Apache Bench(ab)工具模拟多并发 HTTP 请求,测试 Web 服务承载能力:
# 安装 ab(CentOS 需安装 httpd-tools)
yum install httpd-tools -y   # CentOS
apt install apache2-utils -y # Ubuntu

# 测试:10000个请求,100个并发
ab -n 10000 -c 100 http://your_web_site/  # 替换为实际 Web 地址
关键指标:Requests per second(QPS,每秒处理请求数)、Time per request(平均请求时间)。

六、系统综合性能测试

1. UnixBench(综合基准测试)

通过多个测试用例(如文件拷贝、管道吞吐量、进程创建、数学运算)评估系统综合性能,输出单线程 / 多线程综合得分:
# 下载并解压
wget https://github.com/kdlucas/byte-unixbench/archive/master.zip
unzip master.zip && cd byte-unixbench-master/UnixBench

# 编译
make

# 执行测试(默认运行所有用例)
./Run
得分越高,说明系统综合性能越强,可用于不同服务器之间的横向对比。

2. SPEC 系列(行业标准测试)

企业级性能评估的行业标准,涵盖 SPEC CPU(CPU 性能)、SPECjbb(Java 服务器性能)、SPECweb(Web 服务器性能)等多个子项目,需商业授权,适合专业性能评估。

3. 实时监控与可视化

(1)Glances(跨平台监控工具)

Python 编写的全维度监控工具,支持 CPU、内存、磁盘、网络等指标实时展示,界面简洁直观:
pip install glances  # 通过 pip 安装
glances              # 启动监控

(2)Prometheus + Grafana(长期监控与可视化)

适合长期性能监控与趋势分析,通过部署 exporter 收集系统数据,Grafana 生成可视化图表:
  1. 部署 Prometheus 服务(时序数据库,存储监控数据);
  2. 安装 node_exporter(收集 Linux 系统指标)、MySQLd_exporter(MySQL 指标)等;
  3. 配置 Grafana 连接 Prometheus,导入系统监控模板(如 Node Exporter Full),生成可视化图表。

七、压力与稳定性测试

1. stress-ng(多维度压力测试)

stress 的增强版,支持同时对 CPU、磁盘 I/O、内存、网络等多个维度施加压力,验证系统在混合负载下的稳定性:
# 安装 stress-ng
yum install stress-ng -y   # CentOS
apt install stress-ng -y   # Ubuntu

# 混合压力测试:4核CPU、2个I/O线程、1个内存线程(2G内存),持续300秒
stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 2G --timeout 300s

2. LTP(Linux Test Project)

针对 Linux 内核功能的稳定性与压力测试套件,包含数千个测试用例,适合内核开发者或系统运维验证系统底层稳定性,需编译安装。

八、性能分析工具(定位瓶颈)

1. perf(内核性能分析工具)

Linux 内核自带的性能分析工具,可跟踪内核与应用程序的热点函数,定位 CPU 瓶颈:
perf top                # 实时查看系统热点函数(按 CPU 占用排序)
perf record -g ./your_app  # 记录应用程序运行轨迹(-g 保留调用栈)
perf report             # 分析记录结果,查看函数调用耗时

2. strace /ltrace(系统调用 / 库调用跟踪)

跟踪进程的系统调用或库调用,分析程序 I/O 瓶颈、异常调用等问题:
strace -c -p pid        # 统计指定进程(pid)的系统调用耗时与占比
ltrace -c -p pid        # 统计指定进程的库调用耗时与占比

3. pidstat(进程资源占用分析)

精准分析单个进程的 CPU、内存、I/O 占用情况,定位异常进程:
pidstat -urd -p pid 1  # 每秒输出1次进程(pid)的 CPU、内存、I/O 统计

九、测试流程建议

  1. 明确测试目标:确定是测试单一组件(如 CPU、磁盘)还是系统综合性能,是基准测试还是压力测试。
  2. 准备干净环境:关闭无关服务与进程,清理缓存,确保测试环境一致。
  3. 采集基线数据:记录系统空闲状态下的性能指标,作为后续对比基准。
  4. 执行基准测试:运行对应测试工具,记录核心指标(如带宽、QPS、延迟)。
  5. 执行压力测试:逐步提升负载,观察系统性能变化,记录极限负载与稳定性表现(如是否出现宕机、卡顿)。
  6. 分析结果定位瓶颈:结合 top、iostat、perf 等工具,判断性能瓶颈所在(如 CPU 不足、内存泄漏、I/O 缓慢)。
  7. 优化并复测:根据瓶颈调整系统参数(如内核参数、应用配置)、升级硬件,重新测试验证优化效果。

✅ 总结

Linux 性能测试需覆盖 “监控 - 基准 - 压力 - 分析” 全链路,不同测试目标对应不同工具组合:
  • CPU 测试:sysbench、stress、Geekbench
  • 内存测试:stream、sysbench memory、memtest86+
  • 磁盘 I/O 测试:fio、dd、hdparm、iostat
  • 网络测试:iperf3、ab、ping/mtr、netperf
  • 综合测试:UnixBench、Glances、Prometheus+Grafana
  • 瓶颈分析:perf、strace、ltrace、pidstat
实际测试中需根据业务场景选择合适的工具与参数,确保测试结果贴近真实应用场景,为系统优化提供可靠依据。
阅读剩余