1. 调整JVM堆内存配置
ZooKeeper运行在JVM上,堆内存设置直接影响资源占用。建议将-Xms(初始堆大小)与-Xmx(最大堆大小)设置为相同值(如物理内存的1/3,例如4GB内存设为1.3GB),避免堆内存动态扩展带来的性能开销。同时,选择合适的垃圾收集器(如G1 GC,通过-XX:+UseG1GC启用),并调整其参数(如-XX:MaxGCPauseMillis=200设置最大GC暂停时间),减少GC对系统的影响。修改路径为zkServer.sh中的JVMFLAGS环境变量。
2. 优化ZooKeeper配置参数
tickTime(默认2000毫秒)是ZooKeeper的心跳和超时计算单位,可根据集群规模适当调整(如2000-5000毫秒),避免过小导致频繁心跳。initLimit(Leader与Follower初始同步容忍的心跳数,默认10)和syncLimit(同步数据超时时间,默认5)需根据网络延迟调整(如网络延迟高则增大initLimit,避免误判超时)。maxClientCnxns(单个客户端最大连接数,默认无限制)需根据实际负载设置(如100-500),防止过多连接占用内存。autopurge.snapRetainCount(保留快照数量,默认3)和autopurge.purgeInterval(清理频率,默认0,即不启用),建议设置为保留5份快照、每天清理一次(autopurge.snapRetainCount=5;autopurge.purgeInterval=24),释放磁盘空间。3. 操作系统层面优化
sudo swapoff -a)或设置vm.swappiness=0(sudo sysctl vm.swappiness=0),减少内存与磁盘的交换。ulimit -n 65535),避免因连接数过多导致资源占用过高。4. 硬件资源保障
dataDir)和事务日志目录(dataLogDir)部署在SSD上。dataDir(存储快照)和dataLogDir(存储事务日志)放在不同磁盘,减少写操作竞争,提升I/O效率。5. 监控与调优
zookeeper.out),关注警告(WARN)和错误(ERROR)级别日志,快速定位资源占用异常问题(如频繁GC、连接超时)。