1、背景

购买的云主机(1核2G,Debian系统)安装了docker。docker中运行着六七个服务(包括几个微服务项目和mysql,redis,nginx等),之前启动一直好好的,偶尔一天,不知什么原因,系统需要重启,当我手动启动docker的时候,几秒钟的时间内存和cpu立马撑爆了,并且服务器处于假死或者说宕机状态。也无法登录,连云厂商的后台监控都丢失了cpu和内存的监控数据。

服务器重启之后,正常,但是只要一启动docker就再次假死,怎么回事?之前一直好好的呀
在这里插入图片描述

2、解决

进过多次重启尝试无果后,仔细查看了一下内存free -m 发现used与free占比很少,大量内存被buff/cache占据。因此,需要释放buff/cache的内存,将其变成free的。使用下面的命令:

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 3:释放所有缓存

详细内容可以查看下面这篇知乎
https://zhuanlan.zhihu.com/p/459398220

经过这样一番解决,启动docker总算正常了。同时,由于服务器的内存太小(主要是没钱),所以还可以降低性能,通过磁盘空间扩充内存,主要是使用swap,如下图是扩充后的结果
在这里插入图片描述
详细内容可以参考这篇博客:https://blog.csdn.net/qq_44625080/article/details/110203173

注意

如果Permission denied。是因为权限不够,我们只是让echo有root权限,没有让">"命令也有root权限。这时使用下面

sudo sh -c 'sync && echo 1 > /proc/sys/vm/drop_caches'
sudo sh -c 'sync && echo 2 > /proc/sys/vm/drop_caches'
sudo sh -c 'sync && echo 3 > /proc/sys/vm/drop_caches'
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐