案例记录
- 容器引擎内存泄漏
1. 容器引擎内存泄漏
机器上对容器引擎自身的内存限制是4G, 正常情况下, 机器上启动几十个容器,内存使用大致在几百M,问题机器上pouchd一天会触发一次oom,基本上确认是内存泄漏
1个小时pouchd会增长100多M的内存, 所以先去定期抓取pprof数据,使用go tool pprof --base 分析阶段间的内存增长,这里并没有获取到信息
定期也查看/proc/pid/maps数据,发现不断的有匿名段增加,怀疑是用户代码主观无法释放引用数据
定期抓取代码堆栈,分析堆栈后发现,获取某个锁的goroutine在不断增长,从1万3增长到1万5,结合容器代码分析,有3个获取容器监控的goroutine卡住, shim(进程已hang)并没有给返回,kubelet不停的请求容器监控数据,不停的产生新的goroutine,内存使用也不停的增长,最终被oom
删除掉泄漏的shim进程后,容器引擎内存马上释放几个G回归到百M的正常大小