Kafka 无法识别的 VM 选项 'PrintGCDateStamps'
Kafka Unrecognized VM option 'PrintGCDateStamps'
我在远程服务器上安装了 Kafka,当我尝试 运行
~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties
我收到一个错误
Unrecognized VM option 'PrintGCDateStamps'
kafka服务器启动失败。这不是在 vm 中 运行,而是直接在 Ubuntu Server 16.04 上 运行 并正确安装了 Java。有什么方法可以简单地纠正这个问题?
所以我找到了答案并想 post 以防其他人遇到这个问题。在最底部的 kafka/bin/kafka-run-class.sh 中有一部分显示
exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
删除$KAFKA_GC_LOG_OPTS选项。可能是 hack,但至少它可以启动 kafka zookeeper 服务器!
在安装了 oracle jdk 9 的 Ubuntu 16.04 上出现了同样的问题,我也尝试了 openjdk 1.9 并得到了同样的错误。但是当我尝试其他版本jdk时,我发现oracle jdk 8和openjdk 1.8都可以。
所以请检查您使用的 java 版本,也许您可以通过以下方式安装或切换到其他版本的 jdk:
update-alternatives --display java
update-alternatives --config java
java -version
@Mitchell Tracy,我知道这是一个有点老的话题,只是把它放在那里我在同一个问题上的发现,如果有人 运行 遇到同样的问题。
我有 jdk-9(抢先体验)指向我的 $java_home,我本身遇到了各种错误,Unrecognized VM option 'PrintGCDateStamps', -loggc deprecreated, -cp requires a classpath specified
,等等。
使用命令 (sudo mv jdk1.8.0.jdk ~/Documents) 将 jdk-9 从 $java_home 移开并重新启动终端,它就像一个魅力!我能够启动 zookeeper-server-start 和 kafka。
希望对您有所帮助。
截至目前,Kafka的默认包有错误Java 9。最简单的解决方案是回滚到java8。
sudo add-apt-repository ppa:webupd8team/java
sudo apt update; sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default
实际上,Kafka 在 Java 的较新版本上运行良好。我遇到了同样的问题,并在 kafka/bin/kafka-run-class.sh
脚本中发现错误,其中 Java 版本被错误解析。
这一行占用了太多的版本字符串:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"//p')
这使得 if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]
条件无法识别正确的 Java 版本,并添加了一些不受支持的 GC 选项。
将上面的行更改为此解决了我的问题:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*//p')
我已将此报告为 Kafka 的问题。问题可以在这里找到:https://issues.apache.org/jira/browse/KAFKA-6855
编辑:有一个已提交的修复程序:https://github.com/apache/kafka/commit/e9f86c3085fa8b65e77072389e0dd147b744f117
我正在使用 java 10 和 kafka_2.11-0.10.1.0 并且我有相同的 problem.I 在 kafka-[= 中找不到 JAVA_MAJOR_VERSION 30=]-class.sh ,所以我查看了错误。它说 "Unrecognized VM option 'PrintGCDateStamps'" 这意味着 Java 10 个与 GC 相关的 vm 选项已更改并且 Kafka 配置与它不兼容。 This也印证了我的想法。
因此,切换到 Java 版本 < 9 是一个解决方案,但如果您想继续使用新的 java 版本,则无需删除包含该参数的整行,您可以删除指定的选项。我这样做了,然后 "PrintGCTimeStamps" 成了一个问题。我也删除了它。所以我最终得到了下面一行:
KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails " 所以这仍然会打印 GC详细信息,但不会指定时间戳。
Zookeeper 启动没有任何问题!
与其他答案一样——我在 Java 9 上使用了它。必须进行以下更改:
编辑文件bin/kafka-run-class.sh
在文件末尾附近(第 248 行附近)找到以下块:
if [ "x$GC_LOG_ENABLED" = "xtrue" ]; then
GC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIX
KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps "
fi
删除 2 个标志:-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
并保存文件。
Kafka 应该可以在 Java 9
上正常启动
我使用的是 windows 所以我只是 运行 bat 文件而不是 shell 脚本
我在远程服务器上安装了 Kafka,当我尝试 运行
~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties
我收到一个错误
Unrecognized VM option 'PrintGCDateStamps'
kafka服务器启动失败。这不是在 vm 中 运行,而是直接在 Ubuntu Server 16.04 上 运行 并正确安装了 Java。有什么方法可以简单地纠正这个问题?
所以我找到了答案并想 post 以防其他人遇到这个问题。在最底部的 kafka/bin/kafka-run-class.sh 中有一部分显示
exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
删除$KAFKA_GC_LOG_OPTS选项。可能是 hack,但至少它可以启动 kafka zookeeper 服务器!
在安装了 oracle jdk 9 的 Ubuntu 16.04 上出现了同样的问题,我也尝试了 openjdk 1.9 并得到了同样的错误。但是当我尝试其他版本jdk时,我发现oracle jdk 8和openjdk 1.8都可以。
所以请检查您使用的 java 版本,也许您可以通过以下方式安装或切换到其他版本的 jdk:
update-alternatives --display java
update-alternatives --config java
java -version
@Mitchell Tracy,我知道这是一个有点老的话题,只是把它放在那里我在同一个问题上的发现,如果有人 运行 遇到同样的问题。
我有 jdk-9(抢先体验)指向我的 $java_home,我本身遇到了各种错误,Unrecognized VM option 'PrintGCDateStamps', -loggc deprecreated, -cp requires a classpath specified
,等等。
使用命令 (sudo mv jdk1.8.0.jdk ~/Documents) 将 jdk-9 从 $java_home 移开并重新启动终端,它就像一个魅力!我能够启动 zookeeper-server-start 和 kafka。 希望对您有所帮助。
截至目前,Kafka的默认包有错误Java 9。最简单的解决方案是回滚到java8。
sudo add-apt-repository ppa:webupd8team/java
sudo apt update; sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default
实际上,Kafka 在 Java 的较新版本上运行良好。我遇到了同样的问题,并在 kafka/bin/kafka-run-class.sh
脚本中发现错误,其中 Java 版本被错误解析。
这一行占用了太多的版本字符串:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"//p')
这使得 if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]
条件无法识别正确的 Java 版本,并添加了一些不受支持的 GC 选项。
将上面的行更改为此解决了我的问题:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*//p')
我已将此报告为 Kafka 的问题。问题可以在这里找到:https://issues.apache.org/jira/browse/KAFKA-6855
编辑:有一个已提交的修复程序:https://github.com/apache/kafka/commit/e9f86c3085fa8b65e77072389e0dd147b744f117
我正在使用 java 10 和 kafka_2.11-0.10.1.0 并且我有相同的 problem.I 在 kafka-[= 中找不到 JAVA_MAJOR_VERSION 30=]-class.sh ,所以我查看了错误。它说 "Unrecognized VM option 'PrintGCDateStamps'" 这意味着 Java 10 个与 GC 相关的 vm 选项已更改并且 Kafka 配置与它不兼容。 This也印证了我的想法。
因此,切换到 Java 版本 < 9 是一个解决方案,但如果您想继续使用新的 java 版本,则无需删除包含该参数的整行,您可以删除指定的选项。我这样做了,然后 "PrintGCTimeStamps" 成了一个问题。我也删除了它。所以我最终得到了下面一行: KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails " 所以这仍然会打印 GC详细信息,但不会指定时间戳。 Zookeeper 启动没有任何问题!
与其他答案一样——我在 Java 9 上使用了它。必须进行以下更改:
编辑文件
bin/kafka-run-class.sh
在文件末尾附近(第 248 行附近)找到以下块:
if [ "x$GC_LOG_ENABLED" = "xtrue" ]; then
GC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIX
KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps "
fi
删除 2 个标志:
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
并保存文件。Kafka 应该可以在 Java 9
上正常启动
我使用的是 windows 所以我只是 运行 bat 文件而不是 shell 脚本