问题描述
我正在尝试在 Ubuntu 18.04LTS Azure VM 上设置 Zookeeper 3.4.10。
根据ZooKeeper Administrator's Guide "错误的 Java 堆大小 您应该特别注意正确设置 Java 最大堆大小。特别是,您不应该创建 ZooKeeper 交换到磁盘的情况......”
该指南没有给出如何设置最大堆大小的说明。我已经做了一些搜索,并找到了在 zookeeper/conf 目录中创建 java.env 的建议。我已经这样做了,并尝试使用我在研究过程中发现的两种不同方法来设置变量:
尝试 #1:
export JVMFLAGS="-Xmx6144m"
尝试#2
#!/bin/bash
export CLAsspATH="~/zookeeper-3.4.10/conf/log4j.properties"
export JVMFLAGS="-Xmx6144m"
进行这些更改并重新启动zookeeper后,我检查了java堆大小:
java -XshowSettings:vm
并且最大堆大小没有变化。
为zookeeper配置最大堆的正确步骤是什么?
解决方法
Zookeeper 的二进制版本包含 bin
目录,其中包含您感兴趣的以下文件:
- zkServer.sh
- zkEnv.sh
zkEnv.sh
定义了所有配置文件的位置和一些 JVM 调整旋钮,例如 JVM 堆大小。 JVM 堆大小可以通过 shell 变量 ZK_SERVER_HEAP
(以 MB 为单位)进行更改。
使用以下命令设置自定义堆大小:
cd bin/
ZK_SERVER_HEAP=128 ./zkServer.sh start-foreground
在最新版本的 Zookeeper 的输出中,您可以找到以下几行:
2021-01-14 17:24:18,400 [myid:] - INFO [main:Environment@98] - Server environment:os.memory.free=114MB
2021-01-14 17:24:18,400 [myid:] - INFO [main:Environment@98] - Server environment:os.memory.max=128MB
2021-01-14 17:24:18,400 [myid:] - INFO [main:Environment@98] - Server environment:os.memory.total=128MB
可以使用 SERVER_JVMFLAGS
设置其他 JVM 选项,例如,使用非默认 GC:
ZK_SERVER_HEAP=128 SERVER_JVMFLAGS="-XX:+UseShenandoahGC" ./zkServer.sh start-foreground