Ubuntu 22.04 安装 Apache JMeter 5.6.3 指南

在 Ubuntu 22.04 上从官网 tar 包零到一安装配置 Apache JMeter 5.6.3,含 JDK17 前置、配置改动、headless 非 GUI 压测、报告生成与常见问题,均已实测。

Apache JMeterApache JMeter性能优化安装部署Apache基准测试Ubuntu 22.042026/10/11

Ubuntu 22.04 安装 Apache JMeter 5.6.3 指南

目标:在 Ubuntu 22.04 真实服务器上从零一安装 Apache JMeter 5.6.3(Java 性能/功能测试工具),覆盖 JDK 前置、官方下载校验、配置改动、headless 非 GUI 压测与报告生成。已在 Ubuntu 22.04.5 / x86_64 / JDK17 环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • JDK:OpenJDK 17 (build 17.0.20.1)
  • Apache JMeter:5.6.3
  • 安装目录:/opt/apache-jmeter-5.6.3
  • 统一软链:/opt/apache-jmeter -> /opt/apache-jmeter-5.6.3
  • 配置目录:/opt/apache-jmeter/bin/
  • 目标 HTTP 服务(压测对象):Python http.server 监听 127.0.0.1:8080
  • 测试账号:root / q1w2e3r4(如涉及)

二、前置条件

2.1 更新软件源

安装任何软件前先更新 apt 索引:

apt-get update

回显(节选):

Get:16 http://archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages [8243 kB]
Get:17 http://archive.ubuntu.com/ubuntu jammy-backports/main amd64 Packages [82.6 kB]
Fetched 49.0 MB in 7s (7245 kB/s)
Reading package lists...

2.2 安装基础工具

JMeter 官方发布为 .tgz 包,需 wget/curl 下载、tar 解压;压测目标可用 python3 临时起 http 服务:

apt-get install -y wget curl python3

2.3 安装 JDK(JMeter 运行时依赖)

Apache JMeter 是 Java 应用,必须依赖 JDK/JRE。官方推荐 JDK 11 / 17,本机选用 OpenJDK 17:

apt-get install -y openjdk-17-jdk-headless

验证 Java:

java -version

回显:

openjdk version "17.0.20.1" 2026-08-18
OpenJDK Runtime Environment (build 17.0.20.1+1-1-22.04-Ubuntu)
OpenJDK 64-Bit Server VM (build 17.0.20.1+1-1-22.04-Ubuntu, mixed mode, sharing)

💡 说明:-headless 即可满足 JMeter 非 GUI 运行,体积更小,不依赖图形库。

2.4 配置 JAVA_HOME 环境变量

定位 JDK 真实路径:

readlink -f $(which java)

回显:

/usr/lib/jvm/java-17-openjdk-amd64/bin/java

因此 JAVA_HOME 为 /usr/lib/jvm/java-17-openjdk-amd64。写入 /etc/profile 使其对所有登录会话生效:

tee -a /etc/profile >/dev/null <<'EOF'

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
EOF

使配置立即生效并验证:

. /etc/profile
echo "JAVA_HOME=$JAVA_HOME"
java -version | head -1

回显:

JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
openjdk version "17.0.20.1" 2026-08-18

三、版本选型说明

JMeter 版本号形如 5.6.3,官方通过 dlcdn.apache.org/jmeter/binaries/ 发布当前最新稳定版,历史版本在 archive.apache.org/dist/jmeter/。

  • 选择当前稳定版:直接以 dlcdn 列表为准,文档写作时最新为 5.6.3。

查询当前可用最新版本(列表方式):

curl -s https://dlcdn.apache.org//jmeter/binaries/ | grep -oE "apache-jmeter-[0-9.]+\.tgz" | sort -uV

回显:

apache-jmeter-5.6.3.tgz
  • JDK 与版本对照(官方建议):
JMeter 版本最低 JDK推荐 JDK
5.3 ~ 5.488+
5.5 ~ 5.6811 / 17
5.6.x811 / 17

⚠️ 注意:本机使用 JDK17,JMeter 5.6.3 完全兼容;JDK 版本过低会启动失败。

四、部署步骤

4.1 从 Apache 官方下载发布包

统一使用 .tgz 二进制包,无需编译。下载到 /opt:

cd /opt
wget -q https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz

回显(下载成功后列出文件):

ls -lh /opt/apache-jmeter-5.6.3.tgz

回显:

-rw-r--r-- 1 root root 84M Jan  7  2024 /opt/apache-jmeter-5.6.3.tgz

4.2 校验包完整性(可选但推荐)

从官网拉取同名的 .sha512 校验文件并对比:

cd /opt
curl -s -o apache-jmeter-5.6.3.tgz.sha512 \
  https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz.sha512
cat apache-jmeter-5.6.3.tgz.sha512
sha512sum apache-jmeter-5.6.3.tgz

回显(前一行来自官方文件,后一行为本机计算结果,两者一致):

5978a1a35edb5a7d428e270564ff49d2b1b257a65e17a759d259a9283fc17093e522fe46f474a043864aea6910683486340706d745fcdf3db1505fd71e689083 *apache-jmeter-5.6.3.tgz
5978a1a35edb5a7d428e270564ff49d2b1b257a65e17a759d259a9283fc17093e522fe46f474a043864aea6910683486340706d745fcdf3db1505fd71e689083  apache-jmeter-5.6.3.tgz

4.3 解压安装

cd /opt
tar -xzf apache-jmeter-5.6.3.tgz
ls -d /opt/apache-jmeter-5.6.3

4.4 建立统一软链

便于升级时切换版本、统一路径引用:

ln -sf /opt/apache-jmeter-5.6.3 /opt/apache-jmeter
ls -l /opt/apache-jmeter

回显:

lrwxrwxrwx 1 root root 24 Oct 11 11:09 /opt/apache-jmeter -> /opt/apache-jmeter-5.6.3

4.5 目录结构说明

ls /opt/apache-jmeter-5.6.3

回显:

LICENSE    NOTICE    README.md    bin    docs    extras    lib    licenses    printable_docs
目录用途
bin启动脚本(jmeter/jmeter.sh)、jmeter.properties 等配置文件
lib/extJMeter 核心与扩展组件 JAR(ApacheJMeter_*.jar)
lib第三方依赖 JAR(HTTP、JDBC、JSON 等)
docs官方文档(英文)
extras附加脚本与扩展样例
printable_docs可打印文档

4.6 验证安装:查看版本

cd /opt/apache-jmeter/bin
./jmeter -v

回显(含 JMeter ASCII 徽标与版本号,格式对齐原作):

WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
Oct 11, 2026 11:09:49 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.
    _    ____   _    ____ _   _ _____       _ __  __ _____ _____ _____ ____
   / \  |  _ \ / \  / ___| | | | ____|     | |  \/  | ____|_   _| ____|  _ \
  / _ \ | |_) / _ \| |   | |_| |  _|    _  | | |\/| |  _|   | | |  _| | |_) |
 / ___ \|  __/ ___ \ |___|  _  | |___  | |_| | |  | | |___  | | | |___|  _ <
/_/   \_\_| /_/   \_\____|_| |_|_____|  \___/|_|  |_|_____| |_| |_____|_| \_\ 5.6.3

Copyright (c) 1999-2024 The Apache Software Foundation

💡 说明:版本号 5.6.3 出现在徽标右侧,表示安装成功。WARN ... deprecated 为日志组件提示,不影响使用。

五、配置说明

5.1 默认启动方式

JMeter 支持两种运行方式:

  • GUI 模式:直接执行 ./jmeter 打开图形界面(需图形显示环境)。
  • 非 GUI 模式(headless):./jmeter -n -t 测试计划 -l 结果文件,适合无桌面的服务器。

💡 说明:本机为无图形界面的服务器,未设置 DISPLAY,GUI 启动会报错(实测见下节「常见问题」),因此实际压测统一使用非 GUI 模式。

5.2 JVM 堆内存配置(256MB)

JMeter 默认保留堆为 -Xms1g -Xmx1g,对压测服务器偏大。实测将其调整为 256MB,修改启动脚本 bin/jmeter 中的 HEAP 变量(第 166 行附近)。

查看当前默认定义:

grep -nE "Xms|Xmx|Xmn" /opt/apache-jmeter/bin/jmeter | grep HEAP

回显(修改前):

166: : "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"

修改为 256MB 固定堆并启用新生代限制:

sed -i 's|: "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"|: "${HEAP:="-Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m"}"|' \
  /opt/apache-jmeter/bin/jmeter

确认修改生效:

grep -n "Xms256m\|Xmx256m\|Xms1g" /opt/apache-jmeter/bin/jmeter

回显:

166: : "${HEAP:="-Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m"}"

参数含义:

参数含义
-Xms256m初始堆内存 256MB
-Xmx256m最大堆内存 256MB(与 Xms 相等,避免动态扩容抖动)
-Xmn128m新生代 128MB
-XX:MaxMetaspaceSize=256m元空间上限 256MB

💡 说明:HEAP 环境变量可由运行时覆盖脚本内默认值,例如 HEAP="-Xms256m -Xmx512m" ./jmeter -n ...;但直接改脚本行是持久化方式。

IJK 生效验证(配合实际运行,见「五、验证与压测示例」):运行时用 jps -v 观察实际 JVM 参数:

$ jps -v
4668 ApacheJMeter.jar ... -Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m ...

六、验证与压测示例(非 GUI headless 实测)

6.1 启动目标 HTTP 服务

用 Python 内置 http.server 在 8080 端口模拟被测 Web 服务:

mkdir -p /opt/webroot
echo "Hello JMeter from target server" > /opt/webroot/index.html
cd /opt/webroot
nohup python3 -m http.server 8080 >/tmp/http.log 2>&1 &

验证可达:

curl -s http://127.0.0.1:8080/index.html

回显:

Hello JMeter from target server

6.2 创建 HTTP 测试计划(.jmx)

创建 /opt/apache-jmeter/bin/http_test.jmx,内容为:10 个线程、Ramp-Up 2 秒、单次循环,GET http://127.0.0.1:8080/index.html,并挂一个 Summary 汇总监听器(节选核心片段):

<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.3">
  <hashTree>
    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="HTTP Test Plan" enabled="true">
      ...
    </hashTree>
    <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
      <stringProp name="ThreadGroup.num_threads">10</stringProp>
      <stringProp name="ThreadGroup.ramp_time">2</stringProp>
      <boolProp name="ThreadGroup.scheduler">false</boolProp>
    </ThreadGroup>
    <hashTree>
      <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP Request" enabled="true">
        <stringProp name="HTTPSampler.domain">127.0.0.1</stringProp>
        <stringProp name="HTTPSampler.port">8080</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.path">/index.html</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
      </HTTPSamplerProxy>
      <hashTree>
        <ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true"/>
        <hashTree/>
      </hashTree>
    </hashTree>
  </hashTree>
</jmeterTestPlan>

6.3 运行非 GUI 压测并输出结果、生成报告

cd /opt/apache-jmeter/bin
./jmeter -n -t http_test.jmx -l result.jtl -e -o /opt/report 2>&1

运行日志(节选化,含 summary 汇总):

Creating summariser <summary>
Created the tree successfully using http_test.jmx
Starting standalone test @ 2026 Oct 11 11:10:40 GMT (1791717040317)
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary =     10 in 00:00:02 =    4.7/s Avg:    72 Min:     3 Max:   156 Err:     0 (0.00%)
Tidying up ...    @ 2026 Oct 11 11:10:43 GMT (1791717043124)
... end of run

💡 summary = 10 in 00:00:02 = 4.7/s:共 10 个请求、耗时 2 秒、吞吐约 4.7 req/s;Avg: 72 平均响应 72ms;Err: 0 (0.00%) 全部成功。

结果文件 result.jtl(CSV)节选:

timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1791717041970,149,HTTP Request,200,OK,Thread Group 1-1,text,true,,218,129,5,5,http://127.0.0.1:8080/index.html,132,0,92
1791717041963,156,HTTP Request,200,OK,Thread Group 1-2,text,true,,218,129,5,5,http://127.0.0.1:8080/index.html,141,0,100

生成的 HTML 报告目录:

ls /opt/report

回显:

content    index.html    sbadmin2-1.0.7    statistics.json

statistics.json 中的汇总统计(节选):

"Total": {"sampleCount": 10, "errorCount": 0, "errorPct": 0.0, "meanResTime": 72.6, "medianResTime": 46.0, "minResTime": 3.0, "maxResTime": 156.0, "throughput": 8.85}

6.4 headless 模式下验证实际堆内存生效

压测运行中(或运行结束后用日志确认),用 jps -v 观察 JMeter 进程的 JVM 实际参数:

. /etc/profile
jps -v

回显(节选,PID 4668 为 JMeter 进程):

4668 ApacheJMeter.jar --add-opens=java.desktop/sun.awt=ALL-UNNAMED ... -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=256m -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1ReservePercent=20 ...
4716 Jps -Dapplication.home=/usr/lib/jvm/java-17-openjdk-amd64 -Xms8m ...

可见 JMeter 进程实际以 -Xms256m -Xmx256m -Xmn128m 运行,堆限制已生效。

七、注意事项

  • 非 GUI 模式是服务器无桌面环境的唯一推荐方式;GUI 需图形显示(X11)。
  • -e -o 生成报告必须在测试运行结束后进行(-e 表示测试结束后生成,-o 指定输出目录)。
  • 解析 result.jtl 时注意字段顺序,首行为列名头,不同 JMeter 版本列名略有差异。
  • 大并发压测请依据服务器内存调整堆大小;测试值 256MB 已满足轻量压测。

八、常见问题

Q1:运行 ./jmeter(GUI)报 No X11 DISPLAY variable was set

无图形界面服务器实测回显:

================================================================================
An error occurred:
No X11 DISPLAY variable was set,
or no headful library support was found,
but this program performed an operation which requires it.

解决:改用非 GUI 模式 ./jmeter -n -t 计划 -l 结果,无需图形界面。

Q2:wget 下载慢或超时

换 CDN 下载源或到 Apache 官方 SourceForge 镜像重试;或先 curl -I 探连通性。

Q3:java: command not found

说明 JDK 未安装或 PATH 未包含 $JAVA_HOME/bin。确认执行了 . /etc/profile 或重新登录。

Q4:-n 与 -g 不能同时使用

实测回显:Error: Incompatible options --n/--nongui and -g/--reportonly found.。-n 负责运行测试,-g 单独用于从 result.jtl 已有结果生成报告,二者不叠加。

九、卸载方式

停止所有 JMeter 进程并删除安装目录与软链:

pkill -f ApacheJMeter
rm -rf /opt/apache-jmeter-5.6.3 /opt/apache-jmeter
rm -f /opt/apache-jmeter-5.6.3.tgz /opt/apache-jmeter-5.6.3.tgz.sha512

如需同时卸载 JDK:

apt-get purge -y openjdk-17-jdk-headless

十、参考链接