大佬们有个关于Java内存与容器内存回收的问题

我们线上的服务是基于K8S部署的容器,最近频繁接收到告警,内存过高,排查发现存在正常的GC,容器的内存也在正常的释放,
但是整个机器的内存却在不断上升,看着像是,容器中的内存回收后,没有还给操作系统的感觉,但是又不知道怎么排查了,大佬们有没有排查思路

补充,Java的xms和xmx参数设置的是一致的,按理来说,申请到最大内存后并不会释放内存给操作系统,但是操作的可用内存却一直减少

– 补充添加,当前业务涉及到文件读取操作,读取完后也会做成一个文件,同过feign发送出去,目前也在怀疑网络IO层引起的问题

3 Likes

https://linux.do/t/topic/232691

跟你类似的问题,参考看看

感觉很类似,就是GC后,操作系统的缓存还在缓慢的上升,我们的这个需求有个文件做成,IO buffer的使用,打算先排查一下IO buffer看看

低成本的方法,增加物理内存,分配更多的资源。

排查一下告警或者OOM前后的日志,是否存在内存泄漏相关的代码报错?

未发生OOM异常,GC正常回收,操作系统的内存占用却在一直上升

插眼,看看怎么解决。

有看过容器resource配置的初始申请内存和limit内存么?有个邪门歪道,就是申请内存和limit设置成一样 当超限之后自动kill掉重新拉 如果能接受pod经常重启的话。。。。

这个太刺激了,频繁重启容易出问题 :sob:

哈哈,假设服务是纯粹无状态的 重启也只是数据不好看 大不了删库跑路 ::

哈哈哈,其实我们目前线上操作也是重启,只不是申请流程监测内存,隔一段时间重启一次