公司产品使用docker-java控制作业在指定的运行环境(docker容器)里执行,因此经常需要反复启动和停止docker容器,在项目中发现存在一段时间(若干天)后启动容器失败的现象。
问题现象
多次启动docker容器并停止后,发现buff/cache内存占用不断增加,且手工释放没有明显效果:
内存不足的一个表现是无法启动docker容器,报错如下:
OCI runtime create failed: container_linux.go:346: starting container process caused "process_linux.go:319: getting the final child's pid from pipe caused \"EOF\"": unknown
查看meminfo判断主要是slab过多:
问题解决
在网上查询后发现有用户遇到类似问题,原因是kernal 3.10的kmem memory limit不稳定,但这个feature是默认开启的。解决方法是升级内核到kernal 3.10.1075以上,或升级CentOS发行版到7.8或以上。
补充:后来发现3.10版的内核仍然没有完全解决这个问题,升级到4.x版内核后问题解决。
参考资料
https://github.com/moby/moby/issues/37722
https://zhuanlan.zhihu.com/p/106757502
欢迎转载
请保留原始链接:https://bjzhanghao.com/p/2359
请保留原始链接:https://bjzhanghao.com/p/2359