我们正在 生产环境 运行NiFi 1.6.0的Docker容器,并且必须遇到内存泄漏 .
一旦启动,应用程序运行正常,但是,在4-5天后,主机上的内存消耗不断增加 . 在NiFi群集UI中检查时,JVM堆大小几乎不使用大约30%,但OS级别的内存大小为80-90% .
在运行docker启动命令时,我们发现NiFi docker容器正在消耗内存 .
收集JMX指标后,我们发现RSS内存不断增长 . 这可能是什么原因?在群集对话框的JVM选项卡中,年轻的GC似乎也在及时发生,旧的GC计数显示为0 .
我们如何确定导致RSS内存增长的原因?
1 回答
您需要在非docker环境中复制它,因为对于docker,内存是known to raise .
正如我在“Difference between Resident Set Size (RSS) and Java total committed memory (NMT) for a JVM running in Docker container”中解释的那样,docker有一些错误(如issue 10824和issue 15020),这些错误会阻止准确报告Docker容器中Java进程占用的内存 .
这就是为什么像signalfx/docker-collectd-plugin这样的插件(两周前)在PR -- Pull Request -- 35中提到"deduct the cache figure from the memory usage percentage metric":