Ubuntu 22.04 安装 Apache JMeter 5.6.3 指南
在 Ubuntu 22.04 上从官网 tar 包零到一安装配置 Apache JMeter 5.6.3,含 JDK17 前置、配置改动、headless 非 GUI 压测、报告生成与常见问题,均已实测。
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.4 | 8 | 8+ |
| 5.5 ~ 5.6 | 8 | 11 / 17 |
| 5.6.x | 8 | 11 / 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/ext | JMeter 核心与扩展组件 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