CentOS虚拟机升级OpenJDK11后PDI任务故障及优化咨询
PDI 9.3 升级到 OpenJDK 11 后的启动失败与性能优化方案
为什么Spoon会引用Java 11已移除的-Djava.endorsed.dirs参数?
Java 9开始就彻底移除了endorsed.dirs这个参数,PDI 9.3虽然官方宣称支持Java 11,但它的启动脚本(spoon.sh)是从兼容Java 8的版本迭代而来,没完全清理掉旧的Java 8专属配置。这种属于版本适配时的脚本遗留问题,核心功能兼容但启动配置没跟上。
最优解决方案(替代临时注释参数的方法)
1. 彻底清理Java 8专属启动参数
- 除了注释
spoon.sh里的-Djava.endorsed.dirs行,还要检查脚本中的-Djava.ext.dirs参数(Java 9+也已废弃),一并移除或注释。 - 确保脚本开头指定正确的OpenJDK 11路径,避免系统默认Java版本干扰:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH
2. 调整JVM GC参数解决性能问题
从GC日志能看出,堆内存接近上限(2930M接近总堆2942M),导致G1 GC频繁触发,任务启动慢、频繁暂停。修改spoon.sh中的PENTAHO_JAVA_OPTIONS:
PENTAHO_JAVA_OPTIONS="-Xms4G -Xmx8G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=70"
参数说明:
-Xms4G -Xmx8G:根据虚拟机内存调整(比如虚拟机有16G内存可设为-Xms6G -Xmx12G),避免堆内存不足引发频繁GC。-XX:MaxGCPauseMillis=200:限制GC最大暂停时间,减少任务卡顿。-XX:ParallelGCThreads/-XX:ConcGCThreads:根据CPU核心数设置,4核CPU设为4和2即可,避免线程过多占用资源。-XX:InitiatingHeapOccupancyPercent=70:堆内存占用70%时启动并发GC,提前回收内存,避免触发Full GC。
3. 检查Karaf容器的旧配置
PDI内置的Karaf容器可能也有旧参数,打开data-integration/system/karaf/etc/config.properties,找到java.endorsed.dirs相关配置,直接移除或注释。
验证效果
修改完成后重启Spoon或ETL任务,重点观察:
- 启动时间是否恢复正常(普通任务应该在1分钟内完成启动)。
- GC日志中
Pause Young和Concurrent Cycle的频率是否降低,堆内存占用是否稳定在合理区间。
内容的提问来源于stack exchange,提问作者Nikhil
相关产品推荐
相关产品推荐

