温馨提示×

如何用JMeter进行CentOS网络测试

小樊
46
2025-12-21 17:55:07
栏目: 智能运维

在CentOS上使用JMeter进行网络测试

一 环境准备与安装

  • 安装 Java 8(JMeter 5.x 要求 Java 8+):
    • 安装 OpenJDK:sudo yum install -y java-1.8.0-openjdk-devel
    • 验证:java -version
  • 安装 JMeter(推荐手动解压,便于多版本管理):
    • 下载并解压:wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.3.tgz && tar -xzf apache-jmeter-5.4.3.tgz -C /opt/
    • 建立软链:ln -sfn /opt/apache-jmeter-5.4.3 /opt/jmeter
    • 配置环境变量(写入 /etc/profilesource /etc/profile):
      export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
      export JMETER_HOME=/opt/jmeter
      export PATH=$JMETER_HOME/bin:$PATH
      
    • 验证:jmeter -v
  • 可选:安装 JMeter Plugins Manager(便于扩展监听器、图形等):
    • jmeter-plugins-manager-*.jar 放入 $JMETER_HOME/lib/ext,重启 JMeter 后在 GUI 的 Plugins Manager 中安装所需插件。

二 被测服务与网络准备

  • 若没有现网目标,可在本机或另一台 CentOS 上快速起一个 HTTP 服务用于演练:
    • 安装并启动 Apachesudo yum install -y httpd && sudo systemctl start httpd && sudo systemctl enable httpd
    • 放行防火墙:sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload
    • 部署测试接口:在 /var/www/html/test-api/ 放置 index.php,内容 <?php echo "Hello, JMeter"; ?>
    • 如需自定义端口(如 8080):sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
    • 访问地址示例:http://服务器IP:8080/test-api/index.php
  • 防火墙与安全组建议:压测机与被测机之间开放相应 TCP 端口(如 80/8080/1099 等),避免 RMI/后端监听端口被拦截。

三 编写与执行测试计划

  • 测试计划建议(以 HTTP 为例):
    • 线程组:设置并发线程数、Ramp-Up、循环次数/持续时间
    • HTTP Request Defaults:填写被测服务的 Server/IPPort
    • HTTP Request:设置 Path(如 /test-api/index.php
    • 监听器:
      • 非GUI结果:用 Summary ReportView Results in Table 写入 JTL/CSV
      • 实时可视化:添加 Backend Listener,对接 InfluxDB + Grafana(见下一节)
  • 执行方式(非GUI,推荐在压测机执行):
    • 基本命令:jmeter -n -t test.jmx -l result.jtl
    • 分布式压测(Master 指定 Slaves):jmeter -n -t test.jmx -R 192.168.30.132:1099,192.168.30.130:1099 -l result.jtl
    • 生成 HTML 报告:jmeter -n -t test.jmx -l result.jtl -e -o ./html-report
    • 控制台实时汇总(非GUI):在 jmeter.properties 启用
      summariser.name=summary
      summariser.interval=30
      summariser.out=true
      
  • 参数化与文件分发:
    • 使用 CSV Data Set Config 做参数化;若分布式执行,需将 CSV 文件 放到各 Slave 相同路径下,并在脚本中配置一致路径。

四 分布式压测与网络连通性

  • 架构简述:Master 下发脚本,Slave 执行采样并回传结果(默认 RMI 端口 1099)。
  • 关键配置(各节点保持一致版本与依赖):
    • 在所有 Slave 上启动:$JMETER_HOME/bin/jmeter-server
    • 关闭 RMI SSL(测试环境常用):在 jmeter.properties 设置 server.rmi.ssl.disable=true
    • 指定 Slave IP:编辑 jmeter-server,取消 RMI_HOST_DEF 注释并设置为本机 IP
    • Masterjmeter.properties 配置 remote_hosts=slave1:1099,slave2:1099
    • 防火墙/安全组放行 1099(以及可能的 4445 等辅助端口)
  • 运行与验证:
    • Master 执行:jmeter -n -t test.jmx -R <slave1_ip>:1099,<slave2_ip>:1099 -l result.jtl
    • 观察控制台 summary 输出与 Slave 日志,确认采样分发与回传正常。

五 性能调优与监控

  • JMeter 与 JVM:
    • 调整堆内存(编辑 bin/jmeterbin/jmeter.shJVM_ARGS):如 -Xms2g -Xmx8g,一般不超过物理内存的 2/3
    • HTTP 客户端优化:在 jmeter.properties 设置 httpclient4.idletimeout=10000(单位毫秒)
  • 操作系统网络与文件句柄:
    • 文件句柄与进程数(写入 /etc/security/limits.conf 并重新登录生效):
      * soft nofile 65536
      * hard nofile 65536
      root soft nofile 65536
      root hard nofile 65536
      * soft nproc 65565
      * hard nproc 65565
      
    • TCP 参数(写入 /etc/sysctl.conf 并执行 sysctl -p):
      net.ipv4.tcp_syncookies = 1
      net.ipv4.tcp_tw_reuse = 1
      net.ipv4.tcp_tw_recycle = 1
      net.ipv4.tcp_fin_timeout = 30
      net.ipv4.ip_local_port_range = 1024 65000
      
  • 被测端(如 Nginx)常见优化:
    • worker_connections 64000keepalive_timeout 60s(结合实际硬件与业务调优)
  • 实时监控(可选):
    • 使用 InfluxDB + Grafana:JMeter 添加 Backend Listener(InfluxdbBackendListenerClient),InfluxDB 启用 8086/2003,Grafana 建立看板展示 吞吐量、响应时间、错误率 等指标。

0