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

服务重启只内存状态分析



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

351 阅读
请先登录,再评论

回复列表

鹿笙5天前

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

鹿笙5天前

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

你假笨5天前
回复 鹿笙:

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

回复

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了,有点摸不清头脑,第一次出现这个情况

回复