docker部署的生产环境,运行一段时间后,服务器的内存就被占满

作者
2025-08-26阅读 30

1、背景

使用docker做的生产环境部署,log是打印的debug级别。最初是由于一次活动,访问量增加,导致的服务挂了。观察的服务器的情况,内存占用达到了100%,从而导致了服务不可用。

后续的过程中也出现过类似的问题,基本上是3-4天左右就会出现同样的问题,docker重启之后,问题就会得到解决,内存使用量会大幅度下降

2、调查分析过程

我们首先是分析了接口调用量和数据库的效率,整体上没有发现问题,数据库没有死锁,慢sql等问题,接口的调用量也远远达不到上限,而且这个接口的耗时也比较的低。

也就是从服务本身而言没有问题。但是实际表现上确实是内存100%。

由于后续固定周期就会出现问题,这么在这期间监控内存的变化,发现的问题是

(1)、实际的占用内存(常驻内存)其实很少,一直在持续增长的其实是缓存(buffer)

(2)、调用量增加的时候,相应的缓存的占用量增速也会变快

(3)、监控期间,缓存会有波动(也就是会有少许的释放),但是整体上是缓慢增长的状态

3、最终的原因

docker自身的问题,docker在进行大量的IO操作的时候会使得page cahe飙升,导致linux系统一直未将日志文件的缓存flush到磁盘导致;

这里的大量IO操作其实就是日志的写入

4、解决办法

1、把日志级别降低,不要使用debug,使用error或者info。这样的可以让缓存的增长变慢

2、定时执行释放命令:echo 1 > /proc/sys/vm/drop_caches (推荐这个做法)

参考文章

程序占用内存很小,但docker占用内存一直膨胀

My Process Used Minimal Memory, and My Docker Memory Usage Exploded



全部评论

头像
乌兔
前端开发
私信
获得点赞 445
文章被阅读 31,261