k8s中java内存泄漏,docker – Kubernetes OOM pod被杀死,因为内核内存增长很多

我正在开发一个

java服务,它基本上在网络文件系统中创建文件来存储数据.它运行在Ubuntu 18.04 LTS中的k8s集群中.

当我们开始限制kubernetes(限制:内存:3Gi)的内存时,pod开始被kubernetes OOMKILL.

一开始我们认为这是java进程中的内存泄漏,但更深入地分析我们注意到问题是内核的内存.

我们验证了查看文件/sys/fs/cgroup/memory/memory.kmem.usage_in_bytes

我们将案例分离为仅使用DD命令创建文件(不带java),如下所示:

for i in {1..50000}; do dd if=/dev/urandom bs=4096 count=1 of=file$i; done

使用dd命令我们看到同样的事情发生了(内核内存增长到OOM).

在k8s重新启动pod后,我做了一个describe pod:

>最后状态:终止

>原因:OOMKilled

>退出代码:143

创建文件会导致内核内存增长,删除这些文件会导致内存减少.但我们的服务存储数据,因此它会不断创建大量文件,直到因为OOMKilled而终止pod并重新启动.

我们测试了使用带有-kernel-memory参数的独立docker来限制内核内存,并且它按预期工作.内核内存增长到极限并且不再上升.但我们没有找到任何方法在kubernetes集群中这样做.

有没有办法限制K8S环境中的内核内存?

为什么文件的创建会导致内核内存增长并且不会被释放?

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值