1. 调整JVM堆内存大小(核心配置)
ZooKeeper运行在JVM上,其内存使用主要由堆内存决定。需通过修改启动脚本zkServer.sh(位于Zookeeper安装目录的bin文件夹)中的JVMFLAGS环境变量设置初始堆内存(-Xms)和最大堆内存(-Xmx)。建议将两者设置为相同值(如-Xms2g -Xmx2g),避免堆内存动态扩展带来的性能波动。具体数值需根据服务器物理内存和负载调整:
-Xms1g -Xmx1g(避免占用过多内存影响系统及其他服务);-Xms2g -Xmx4g(兼顾性能与资源利用率)。2. 禁用或减少交换分区(Swap)使用
交换分区会导致内存与磁盘频繁交换,严重影响ZooKeeper性能。建议通过以下方式禁用Swap:
swapoff -a命令临时禁用;/etc/fstab文件,注释掉Swap分区对应的行(如/dev/mapper/centos-swap swap swap defaults 0 0),永久禁用。vm.swappiness(默认值60)降低对Swap的依赖,设置为10以下(如echo 'vm.swappiness=10' >> /etc/sysctl.conf,然后sysctl -p)。3. 优化JVM垃圾回收(GC)策略
选择合适的GC算法可减少GC停顿时间,提升ZooKeeper响应速度。建议在JVMFLAGS中添加-XX:+UseG1GC(G1垃圾回收器,适用于大内存场景)或-XX:+UseCompressedClassPointers -XX:+UseCompressedOops(压缩指针,减少内存占用)。例如:
JVMFLAGS="-Xms2g -Xmx2g -XX:+UseG1GC"。
4. 监控内存使用状态
定期监控ZooKeeper内存使用情况,及时发现异常:
top、htop命令查看ZooKeeper进程的内存占用(RES列);jstat -gcutil <pid> 1000命令(<pid>为ZooKeeper进程ID)监控GC情况(如老年代使用率、GC时间);5. 其他辅助优化措施
autopurge.snapRetainCount(保留快照数量,默认3)和autopurge.purgeInterval(清理间隔,默认0,设为24小时)参数,自动清理旧数据,释放磁盘空间。