大量的Watcher与ZNode关系会导致ZooKeeper服务器的内存消耗增加,因为Watcher机制需要在内存中维护状态,当Watcher和ZNode的数量非常大时,可能会引起性能问题和资源压力。
ZooKeeper 在运行一段时间后,内存占用率会不断增加,容易导致内存耗尽(OOM)的问题。
如果 ZNode、和 Watcher 的数量都比较多,并且客户端订阅 ZNode 也比较多,甚至全量订阅。这两张 Hash 表记录的关系就会呈指数增长,最终会是一个天量!
当全订阅时,如图演示:
当 ZNode数量:3,Watcher 数量:2 WatchTables 和 Watch2Paths 会各有 6 条关系。
通过监控发现,异常的 ZK-Node。ZNode 数量大概有 20W,Watcher 数量是5000。而 Watcher 与 ZNode 的关系条数达到了 1 亿。
如果存储每条关系的需要 1 个 HashMap&Node(32Byte),由于是两个关系表,double 一下。那么其它都不要计算,光是这个“壳”,就需要 210000^232/1024^3 = 5.9GB 的无效内存开销。
参考文档https://blog.csdn.net/yunqiinsight/article/details/138615944
大量的Watcher与ZNode关系会导致内存开销显著增加。因为每一条关系都需要存储,如果关系数量巨大,那么所需的内存空间也会非常大。例如,在监控中发现的异常ZK-Node中,仅存储这些关系的“壳”就需要约5.9GB的无效内存开销。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。