如何利用JMeter分析CentOS系统性能
小樊
38
2025-12-07 21:43:24
利用 JMeter 分析 CentOS 系统性能
一 整体思路与拓扑
- 在 CentOS 上部署 JMeter 压力机(建议非 GUI 运行),对被测服务(如 Nginx/HTTP、Tomcat、数据库)发起可控并发请求。
- 在被测 CentOS 上开启系统与应用监控(如 top、htop、vmstat、iostat),必要时结合 InfluxDB + Grafana 实时可视化,形成“压测流量—资源指标”的闭环。
- 测试完成后用 JMeter 的 Summary Report、Aggregate Report 与 HTML 报告分析 响应时间、吞吐量、错误率、并发能力,并据此定位瓶颈。
二 环境准备与安装
- 安装 Java 8+(JMeter 5.x 要求 Java 8 及以上):
- 命令示例:yum install -y java-1.8.0-openjdk(或 java-1.8.0-openjdk-devel)
- 验证:java -version
- 安装 JMeter(以 5.4.3 为例):
- 下载并解压:wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.4.3.tgz
- 解压:tar -xzf apache-jmeter-5.4.3.tgz
- 配置环境变量(/etc/profile 或 ~/.bash_profile):
- export JMETER_HOME=/opt/jmeter/apache-jmeter-5.4.3
- export PATH=$JMETER_HOME/bin:$PATH
- 验证:jmeter -v
- 运行方式建议:压测使用非 GUI 模式(见下一节)。
三 测试执行步骤
- 创建测试计划(可在本地 GUI 完成后再上传 .jmx):
- 添加 Thread Group(设定线程数、Ramp-Up、循环次数)
- 添加 Sampler(如 HTTP Request、JDBC Request 等)
- 添加 Listener(如 Summary Report、Aggregate Report;用于本地或非 GUI 生成报告)
- 上传脚本到 CentOS:如 rz 上传 test_plan.jmx
- 非 GUI 执行与报告:
- 基本命令:jmeter -n -t /path/to/test_plan.jmx -l /path/to/results.jtl
- 生成 HTML 报告:jmeter -n -t /path/to/test_plan.jmx -l /path/to/results.jtl -e -o /path/to/report_dir
- 实时监控(可选):搭建 JMeter + InfluxDB + Grafana,将测试过程中的指标实时可视化,便于边压边看。
四 结果分析与瓶颈定位
- JMeter 报告关键指标:
- Throughput(吞吐量,请求/秒)、Average/Median/P95/P99(响应时间)、Error%(错误率)、KB/sec(带宽)
- 判定思路:随着并发上升,若 吞吐不再增长而响应时间陡增/错误率上升,通常意味着瓶颈出现(CPU、连接、I/O、数据库、锁等)
- 服务器端配合排查(在被测 CentOS 上执行):
- 系统资源:top/htop(CPU、内存)、vmstat(上下文切换、运行队列)、iostat(磁盘 IOPS/await)
- Java 应用(若为 Java):jstat(GC 情况)、jmap(堆内存)、必要时 jmap -dump 导出 .dump 用 MAT 分析内存泄漏
- 常见现象与方向:
- CPU 持续打满:应用计算密集/频繁 GC;考虑代码优化、JVM 调优、扩容
- Load 高但 CPU 不高:I/O 或外部依赖(DB/缓存/网络)瓶颈;查 iostat、慢查询、连接池
- 端口/连接耗尽:检查 ulimit -n、内核 net.ipv4.ip_local_port_range、短连接回收(如 tcp_tw_reuse/fin_timeout)与后端最大连接配置
- 数据库瓶颈:慢 SQL、锁等待、连接数不足;结合数据库监控与执行计划优化
五 提升 JMeter 测试效率与稳定性
- JMeter 侧:
- 使用 非 GUI 模式压测;必要时采用 分布式压测 扩展并发能力
- 合理设置 线程数、定时器、连接/超时参数,避免客户端自身成为瓶颈
- 系统侧(CentOS):
- 文件句柄与进程数:/etc/security/limits.conf 调大 * soft/hard nofile、nproc
- TCP 参数:/etc/sysctl.conf 调整如 net.ipv4.tcp_tw_reuse、net.ipv4.tcp_fin_timeout、net.ipv4.ip_local_port_range 等
- I/O 调度器:如将 sda 调度器设为 deadline/noop(cat /sys/block/sda/queue/scheduler;echo deadline > …)
- 其他:按需调整 swappiness、关闭不必要服务、更新系统、必要时临时关闭 SELinux(仅测试环境)
- 监控侧:
- 建议启用 InfluxDB + Grafana 实时看板,结合 JMeter Backend Listener 推送指标,便于快速定位拐点与异常。