排查Docker容器内存占用问题记录
排查Docker容器内存占用问题记录
xxfer情况说明
前段时间,服务器总是莫名宕机,部署在上面一些站点当然也就不行了。然后我就去后台看了一下,发现应该是内存占用过高
引起的:
一开始也没太当回事,因为每次宕机一般间隔几天,想着宕机以后去重启一下就好了。于是就先安了一个监控,监控部署在上面的站点,一旦站点无法访问,就会通知我去重启,问题暂时从表面解决了。
但是接下来几天,情况愈演愈烈,一天就要宕机好几次。博客上的一些图片也是放在上面的,影响了博客的加载速度,没办法了,只好着手解决。
查看了上一周的使用状况:
初步判断应该是Docker容器占用了太多的内存
,主要服务器上也就部署了几个容器,第一时间想到的肯定是容器的锅,结果也确实是。
排查过程
部署在服务器上的项目:兰空图床、Picsur图床、一个支持端到端连接的聊天工具、Nginx Proxy Manager和长亭雷池。
- 首先排除一下磁盘占用的问题挂载的磁盘占用还是非常健康的,可以暂时排除这个原因。
- 观察CPU和内存资源发现内存占用很高。尝试清除缓存:
1
2
3
4
5
6
7
8To free pagecache:仅清除页面缓存(PageCache)
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:清除目录项和inode
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:清除页面缓存,目录项和inode
echo 3 > /proc/sys/vm/drop_caches发现内存使用还是居高不下,问题多半是出在docker容器上了。 - 应该不会是内存泄露的问题,当然也应该不会是日志文件的大量读写,因为内存占用并没有一直膨胀,io使用率也是正常的。
- 使用
docker stop $(docker ps -a -q)
命令结束所有容器 - 逐个开启容器,然后使用
docker stats
查看资源占用情况
最后发现长亭雷池
和兰空图床
的占用过高,一般有下面的解决方式:
- 限制容器的内存占用
- 开辟swap交换空间
- 关闭部分高占用容器(简单粗暴)
开始的两种方式好像并不能无脑使用,需要结合自身使用情况进行合理的配置。
最终解决方式
其实我挺纳闷的,我明明已经早早地设置了交换空间,为什么还会出现这种情况呢?感觉还存在知识盲区吧,一开始部署的时候其实就考虑了内存占用的问题,并提前设置了两倍内存的交换空间,但是内存占用过高的问题还是出现了。
至于设置了交换空间,却没有起到显著的效果,还需要研究一下,有可能很复杂,也有可能很简单……
最后,还是把兰空图床给停用了,并限制了雷池的内存占用,观察了几天,发现没有再出现之前的问题了,是能说暂时安全了,可能这台服务器经不起这样造(doge)。
关于Docker内存限制管理,网上有不少优秀案例,推荐一篇:
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果