zookeeper因内存不足造成的CPU占用率高

Clickhouse出现建表非常慢的现象。去服务器上看到zookeeper有两个节点的CPU占用率达到50%以上,而另一个节点CPU占用正常。试图用zcCli登录zk失败“Unable to read additional data from server sessionid”zkServer status也报错“Error contacting service. It is probably not running”,说无法连接。Netstat –anp2181端口是在监听,不过地址看着是ipv6。怀疑是防火墙的问题,一查已经关闭。关闭ipv6也不行,zk还是以ipv6监听。看其他两个节点也是ipv6监听,看来不是v6的问题。尝试重启zk服务,启动后仍无法连接,看日志启动后读取一个快照文件后不久,报了“java.lang.OutOfMemoryError: GC overhead limit exceeded zookeeper”错误,在conf下增加JVM内存配置文件java.env,内容如下;

export JVMFLAGS="-Xms8192m -Xmx8192m $JVMFLAGS"

再启动服务。把另外两台机器的内存也提高后重启服务。

### ZooKeeper 断开连接导致 CPU 使用率过的解决方案 #### 一、分析原因 ZooKeeper 突然断开连接可能导致 CPU 使用率过,这通常与多个因素有关。客户端连接数量过多时,可能会导致连接延迟和资源消耗[^1]。此外,如果存在大量的临时节点 (EPHEMERAL_SEQUENTIAL),当客户端断开连接后这些节点会被自动删除,这一过程可能引发频繁的垃圾回收活动,从而占用大量 CPU 资源。 #### 二、优化措施 ##### 1. 减少不必要的客户端连接 通过合理规划应用程序架构,减少不必要的客户端连接数。可以考虑引入代理层或者使用连接池技术来降低直连到 ZooKeeper 的客户端数目,进而减轻服务器负担并提稳定性。 ##### 2. 配置合理的会话超时时间 适当调整 `sessionTimeout` 参数,在保证应用逻辑正常运行的前提下尽可能缩短此参数值。较短的会话超时期限有助于更快地清理掉失效的会话及其关联资源,防止因长时间未响应而累积下来的僵尸会话造成系统负载升。 ##### 3. 控制 znode 数据量 遵循最佳实践建议,不将大块数据存放在 znode 中;每个节点的数据大小应保持较小规模 (<1MB)[^2]。这样不仅可以提升整体性能表现,也能有效规避由于大数据传输带来的额外计算成本。 ##### 4. 合理利用监听器机制 对于确实需要实时感知某些路径变化的应用场景来说,应当谨慎设计监听策略,避免过度依赖于频繁触发的通知事件。因为每次变更都会向所有订阅者发送消息,这同样会对集群带来不小的冲击力。 ##### 5. 增强硬件配置或扩展集群规模 针对现有物理机/虚拟机资源配置不足的情况,则可通过升级处理器型号、增加内存容量等方式增强单台机器的能力边界;亦或是采取水平拓展的方式构建更大规模的服务集群以分摊流量压力。 ```bash # 修改 sessionTimeout 设置示例(单位毫秒) zookeeper-client -server localhost:2181 set /path/to/node "data" {\"ephemeralOwner\":0,\"dataLength\":7,"numChildren":0,"pzxid":9} 30000 ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值