求助>服务重启只内存状态分析>
15回复
1年前

服务重启只内存状态分析



目前线上有个基于SpringCloud +Akka的服务,基础环境是Docker和K8s,容器内存大小2G,xmx为1G,服务启动之后,Grafna监控内存使用一直上涨,最后容器重启。但是jstat看到的java内存老年代使用率尚未超过20%,求助社区朋友。
WeChatc2452d6089d7c082487ff130818af15e.png
WeChat62434fc9c6f1173237f0518b28a095bf.png

4504 阅读
请先登录,再评论

虽然短时间内内存没有上涨了,但是整个应用的内存还是持续上升的image.pngimage.png

1年前

压测短时间内内存暴涨的问题已经解决了,原因是TensorFlow的Tensor没有close导致资源没有释放。

1年前
回复 你假笨:

TensorFlow 是自己的so库,好像heap dump看不到

1年前回复
回复 鹿笙:

如果是这种情况通过heap dump应该比较明显就看到了

1年前回复

memory usage 超过了docker 的限制 2G,居然可以正常的running。不可以理解

1年前
回复 Ryan🇨🇳:

可以像一下为什么😁

1年前回复

本地测试服务,内存一直飙高 -xma2G,但是实际内存和虚拟内存都超了image.png

1年前
回复 叶次然:

image.png
堆外也没发现持续增长,不过现在找到出现问题的代码块了(java tensorflow),可能是使用方式出问题了,继续排查。
谢谢大佬的耐心指导,👍

1年前回复
回复 鹿笙:

1.本地测试服务开启JMX并用JDK自带工具jconsole连上服务
2.选择MBean->java.nio->BufferPool->direct->属性,观测MemoryUsed是否持续上涨jconsole查看堆外内存.png
3.如果堆内存没有出现泄漏,那大概率是堆外内存发生泄漏了
4.因为docker容器内存最大是2g,堆外内存最大值等于堆内存最大值(即2*1g),再加上jvm运行时占用的其他空间,很容易将内存耗尽
PS:可以把运行日志、gc log也贴一下,对排查有帮助

1年前回复

可以内存dump下传到我们社区的内存分析产品上看看

1年前

容器内存大小2G,监控到的内容使用量大大超过2G,是否大量使用了堆外内存?

1年前
回复 正弋:

代码书写是没有使用堆外内存的,如果有的话估计只有AKKA了,有点摸不清头脑,第一次出现这个情况

1年前回复