目前我们打算将nacos server从1.4.4升级到2.0.4,跑了两天发现内存泄漏和full gc频繁 前置条件:
nacos集群为三节点
每节点配置:8C8G,堆为4g
client端版本:1.4.0
cliient连接server三节点方式为直接填写三节点ip,中间没有经过vip
从1.4.4升级到2.0.4过程中正常
首先是发现其中一个节点cpu明显增高
分析gc日志,可以看到full gc过于频繁,且gc前后堆大小几乎没变化
MAT分析堆栈 这里的byte数组经过排查,保存的是/nacos/v1/cs/configs/listener接口的信息,每一个占520KB,总共2267个,1.2g左右 去掉软,弱引用查看gc root,被两个http线程引用(17,23) 总共有203个http-nio-8848-*线程,但比较奇怪的是,我任意找的每个/nacos/v1/cs/configs/listener都是被这两个http线程引用。 java.nio.HeapByteBuffer有36000+个,其中部分也是被这两个线程引用。 看了下别的http线程,基本都是Time-WAIT状态 没搞明白为什么这个节点会有那么多的/nacos/v1/cs/configs/listener hold在这里,分析了另一个没有内存泄露的节点,hold住的/nacos/v1/cs/configs/listener只有134个
几点疑惑: 1、在开发,测试,预发环境升级都不约而同的出现某个节点会内存泄露的问题。 2、给我的感觉是似乎客户端的请求都发到了这一个节点?而不是另外的节点? 3、其余没有发现什么问题,接下来如何排查呢?