搭建Elasticsearch集群出现Unrecognized VM option ‘UseCMSInitiatingOccupancyOnly‘

文章讨论了解决Java应用程序中与CMS垃圾回收器相关的参数问题,发现注释特定参数可以避免解析和使用,从而避免潜在问题。解决方案是找到并修改`jvm.options`文件中的相关设置。

错误描述

研究发现根本不是Java版本问题也不是elasticsearch的问题原因

注释这三个参数,Java 虚拟机就不会再解析和使用这些参数了。这些参数通常用于配置使用 CMS (Concurrent Mark Sweep) 垃圾回收器的行为。

解决方式找的文件jvm.options

-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly

注释下方这样即可

#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly

在 JDK 17 中出现 `Unrecognized VM option 'UseParNewGC'` 错误的原因是该垃圾回收器选项已被移除,不再支持。JDK 在逐步演进过程中对 JVM 参数进行了清理和优化,特别是在 JDK 9 及之后版本中,引入了模块化的垃圾回收机制(G1 作为默认 GC),并逐渐淘汰了一些旧的垃圾回收器配置参数,其中包括 `UseParNewGC` 和 `UseConcMarkSweepGC` 等 CMS 相关参数。 ### 原因分析 - **JDK 9 引入 G1 为默认垃圾回收器**:从 JDK 9 开始,G1(Garbage First)成为默认垃圾回收器,并逐步替代 CMS 和 ParNew 等传统垃圾回收器。 - **CMS 与 ParNew 被弃用**:在 JDK 14 中,CMS 被正式移除[^2],而 `UseParNewGC` 作为 CMS 的配套新生代 GC,在后续版本中也被逐步淘汰。 - **JDK 17 完全移除相关参数**:到 JDK 17,这些旧参数已完全从 JVM 实现中去除,尝试使用会导致启动失败。 ### 解决方法 1. **更新 JVM 参数配置**: 使用现代垃圾回收器如 G1 或 ZGC 替换旧的 GC 配置。例如,启用 G1 回收器并调整堆内存设置: ```bash -XX:+UseG1GC -Xms4g -Xmx4g -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=4M ``` 这些配置适用于大多数高吞吐量场景,并且与 JDK 17 兼容。 2. **移除废弃参数**: 删除所有与 CMS 和 ParNew 相关的参数,包括: ```bash -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=1 ``` 3. **兼容性适配建议**: 如果当前系统或中间件依赖于特定的老版本 GC 行为(如 Elasticsearch、Logstash 等),应参考其官方文档推荐的 JDK 版本及 JVM 参数。例如,某些早期版本的 Logstash 对 Java 8 有强依赖[^3],需单独为其配置兼容的运行时环境。 4. **多版本 JDK 共存管理**: 若多个项目对不同 JDK 版本有依赖需求,可通过环境变量隔离方式实现多版本共存。例如在 Linux 下通过脚本指定特定 Java 版本启动应用: ```bash #!/bin/bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH ./your-application.sh ``` 5. **日志与诊断工具升级**: 针对监控和日志输出相关的参数,如 `-XX:+PrintGCDetails`、`-XX:+PrintGCDateStamps` 等仍可保留,但建议结合新的 GC 日志格式使用: ```bash -Xlog:gc*:file=/path/to/gc.log:time -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/heapdumps/ ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值