kafka无法识别的vm选项“printgcdatestamps”

eivgtgni  于 2021-06-07  发布在  Kafka
关注(0)|答案(7)|浏览(1352)

我在远程服务器上安装了kafka,当我尝试运行

~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties

我收到一个错误

Unrecognized VM option 'PrintGCDateStamps'

Kafka服务器启动失败。这不是在虚拟机中运行的,而是直接在ubuntu服务器16.04上运行,并正确安装了java。有什么方法可以简单地纠正这个问题吗?

kmynzznz

kmynzznz1#

所以我找到了答案,想把它贴出来,以防其他人有这个问题。在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\u gc\u log\u opts选项。可能是一个黑客,但至少它得到了Kafkazookeeper服务器启动!

o7jaxewo

o7jaxewo2#

我正在使用java 10和kafka_2.11-0.10.1.0,我遇到了同样的问题。我在kafka-run-class.sh中没有找到java_major_版本,所以我检查了错误。它说“无法识别的vm选项'printgcdatestamps'”这意味着,java10gc相关的vm选项被更改,kafka配置与之不兼容。这也证实了我的想法。
因此,切换到java版本<9是一种解决方案,但是如果您想继续使用新的java版本,那么您可以删除指定的选项,而不是删除包含该参数的整行。我这么做了,“打印时间戳”就成了问题。我也把它去掉了。最后我得到了下面的一行:kafka\u gc\u log\u opts=“-xloggc:$log\u dir/$gc\u log\u file\u name”-verbose:gc -xx:+printgcdestails“所以这仍然会打印gc细节,但是不会指定时间戳。Zookeeper开始没有任何问题!

00jrzges

00jrzges3#

在安装了oraclejdk9的ubuntu16.04上也出现了同样的问题,我也尝试过openjdk1.9,但得到了相同的错误。但是当我尝试其他版本的jdk时,我发现oraclejdk8和openjdk1.8都可以。
所以,只要检查一下您使用的是什么版本的java,也许您可以通过以下方式安装或切换到其他版本的jdk:

update-alternatives --display java
update-alternatives --config java
java -version
au9on6nz

au9on6nz4#

到目前为止,kafka的默认包在java9中有错误。最简单的解决方案是回滚到java8。

sudo add-apt-repository ppa:webupd8team/java
sudo apt update; sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default
evrscar2

evrscar25#

@mitchell tracy,我知道这是一个有点老的线程,只是把它放在那里我的发现在同一个问题上我遇到的,如果有人遇到相同的问题。
我让jdk-9(早期访问)指向我的$java\主页,我得到了各种各样的错误本身, Unrecognized VM option 'PrintGCDateStamps', -loggc deprecreated, -cp requires a classpath specified ,等等。
用一个命令(sudo mv jdk1.8.0.jdk~/documents)把jdk-9从$javau home移到一边,然后重新启动终端,它像个魔咒一样工作!我启动了zookeeper服务器start和kafka。我希望这有帮助。

iklwldmw

iklwldmw6#

和其他答案一样——我得到这个是为了在Java9上工作。必须进行以下更改:
编辑文件 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应该从Java9开始

cx6n0qe3

cx6n0qe37#

实际上,kafka在java的新版本中运行良好。我也遇到了同样的问题,并且在 kafka/bin/kafka-run-class.sh 脚本,其中java版本被错误地解析。
此行获取的版本字符串太多:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p')

这使得 if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] 条件无法识别正确的java版本,并添加了一些不受支持的gc选项。
把上面的行改成这样就解决了我的问题:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*/\1/p')

我把这件事当作Kafka的问题来报道。问题可以在这里找到:https://issues.apache.org/jira/browse/kafka-6855
编辑:有一个已提交的修复程序:https://github.com/apache/kafka/commit/e9f86c3085fa8b65e77072389e0dd147b744f117

相关问题