《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(1)https://developer.aliyun.com/article/1554140
内存分析
为了探究 JVM 堆中内存占用分布,得物技术团队立即做了一个 JVM 堆 Dump。分析发现 JVM 内存被 childWatches 和 dataWatches 大量占用。
- dataWatches:跟踪 znode 节点数据的变化。
- childWatches:跟踪 znode 节点结构 (tree) 的变化。
childWatches 和 dataWatches 同 源 于 WatcherManager 。
经过资料排查,发现 WatcherManager 主要负责管理 Watcher。ZooKeeper(ZK) 客户端首先将 Watcher 注册到 ZooKeeper 服务器上,然后由 ZooKeeper 服务器使用 WatcherManager 来管理所有的 Watcher。当某个 Znode 的数据发生变更时, WatchManager 将触发相应的 Watcher,并通过与订阅该 Znode 的 ZooKeeper 客户端的 socket 进行通信。随后,客户端的 Watch 管理器将触发相关的 Watcher 回调,以执行相应的处理逻辑,从而完成整个数据发布/订阅流程。
《阿里云产品四月刊》—得物 ZooKeeper SLA 也可以 99.99%丨最佳实践(3)https://developer.aliyun.com/article/1554138