用 JMeter 测试 Linux 服务器性能的标准流程
一 环境与工具准备
- 在压测机(可为 Linux 或 Windows)安装 JDK 8+,并配置 JMETER_HOME 与 PATH;JMeter 建议使用 5.x 版本,且压测机与被测服务器网络互通。
- 在 JMeter 中安装常用插件:将 JMeterPlugins-Standard.jar、JMeterPlugins-Extras.jar 放入 $JMETER_HOME/lib/ext,重启 JMeter 后即可使用 jp@gc 系列监听器(如 PerfMon、Transactions per Second)。
- 在被测 Linux 服务器部署 ServerAgent(采集 CPU、内存、磁盘 I/O、网络 I/O),默认监听 4444/TCP;如需修改端口可使用:startAgent.sh --tcp-port 1234。
- 如需更大并发,准备 分布式压测:多台压力机作为 Slave,一台控制台作为 Master 统一调度。
二 测试计划设计与脚本编写
- 新建测试计划 → 添加线程组(Thread Group):设置 Number of Threads(并发用户数)、Ramp-Up Period(启动时长,秒)、Loop Count(循环次数);若需按时间调度,可用调度器设置 Duration。
- 添加取样器(Sampler):
- Web/API:添加 HTTP Request(配置 Server/IP、Port、Path、Method、Header、Body 等)。
- 数据库:添加 JDBC Request(配合 JDBC Connection Configuration)。
- 添加监听器(Listener):
- 结果汇总:Summary Report、Aggregate Report。
- 吞吐趋势:jp@gc - Transactions per Second。
- 服务器资源:jp@gc - PerfMon Metrics Collector(建议为 PerfMon 单独设置输出 CSV,便于后续分析)。
- 参数化与关联:使用 CSV Data Set Config 做数据驱动,使用 Regular Expression Extractor / JSON Extractor / BeanShell PostProcessor 处理动态参数。
三 在 Linux 上执行压测与监控
- 非 GUI 执行(推荐):
- 基本命令:jmeter -n -t your_plan.jmx -l result.jtl
- 运行后生成 HTML 报告:jmeter -g result.jtl -e -o reports/
- 后台执行与日志:nohup ./jmeter -n -t your_plan.jmx -l result.jtl > jmeter.log 2>&1 &
- 服务器资源监控:
- 使用 PerfMon Metrics Collector 连接被测机 IP:4444,采集 CPU、Memory、Disk I/O、Network I/O。
- 或使用 nmon 在服务器侧采样:nmon -ft -s 10 -c 60 -m /root/nmon(采样间隔 10s、次数 60),结束后用 nmon analyser v51_2.xlsm 生成图表。
四 分布式压测与高并发场景
- 架构:一台 Master 控制台 + 多台 Slave 压力机。
- 配置要点:
- 所有节点安装相同版本 JMeter;Slave 的 jmeter-server 启动时设置 -Djava.rmi.server.hostname=本机IP。
- 在 jmeter.properties 中关闭 SSL:server.rmi.ssl.disable=true;必要时固定 server.rmi.localport / server_port。
- Master 的 remote_hosts=slave1_ip:端口,slave2_ip:端口。
- 执行:在 Master 上运行 jmeter -n -t your_plan.jmx -R slave1_ip,slave2_ip -l result.jtl -e -o reports。
五 结果分析与容量评估
- 关键指标:
- 吞吐能力:Throughput / TPS(jp@gc - Transactions per Second)。
- 稳定性:Error %、95th/99th Percentile 响应时间。
- 资源健康:CPU、内存、磁盘 I/O、网络 I/O 的利用率与抖动。
- 方法建议:
- 通过 峰值测试(如 10/20/50/100/… 并发)寻找拐点,结合 二分法 快速逼近最佳并发;
- 进行 疲劳测试(在最佳并发附近持续 8–10 小时)验证稳定性;
- 经验阈值:CPU ≤ 70%、内存占用 ≤ 50%(以实际业务目标为准,超过则需优化或扩容)。
六 常见问题与优化建议
- JMeter 自身内存不足:编辑 jmeter(或 jmeter.sh/jmeter.bat)中的 HEAP 参数,建议 -Xms 与 -Xmx 设为相同,如 -Xms4g -Xmx4g;一般不超过可用物理内存的 80%。
- 分布式连通性:确保 Master 与 Slave 互通,正确设置 RMI hostname/端口,必要时关闭 SSL 并固定端口。
- 端口与防火墙:ServerAgent 默认 4444/TCP,需在服务器放行对应端口(如使用 iptables 开放端口)。
- 采样频率:nmon/PerfMon 的采样间隔不宜过密(如 10s),避免产生额外负载与磁盘压力。
- 生产注意事项:尽量避开业务高峰;先做小流量演练;保留 JMX、JTL、报告、nmon 原始数据以便复盘。