昨天晚上后台服务突然挂了,赶紧登上去一看,服务进程一个都没了,我们的进程托管是用的pm2 ,
使用pm2 ls 一看,所有服务全没了,
然后有一行报错 , no disk space ...
磁盘满了。然后赶紧看看
df -h
大致是
udev 7.8G 4.0K 7.8G 1% /dev
tmpfs 1.6G 7.6M 1.6G 1% /run
/dev/vda1 50G 18G 31G 37% /
tmpfs 7.8G 24K 7.8G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
overlay 50G 50 0 100% /var/lib/docker/overlay2/7e886934ab879d74e652c79951a2ad5025b0b6c942afbc51f688b4e0d1b15b22/merged
shm 64M 0 64M 0% /var/lib/docker/containers/79d703996dbed9c557e09f997aaede5c4224353756b9d2fc72d892036f5467de/mounts/shm
shm 64M 0 64M 0% /var/lib/docker/containers/c9eefc124300ac8f008cbb2cb12434f83e23af10a6a34265ea750c6a50214658/mounts/shm
tmpfs 1.6G 0 1.6G 0% /run/user/500
仔细观察是 overlay 满了,google一下 怀疑是 docker的日志文件满了,但是实际上去看呢,并没有多大的占用,最多也就2g
这个可就奇怪了。
然后执行
docker system df
发现镜像和容器加起来磁盘占用也不到2g,但是清理一下
docker system prune -a
执行完成之后并没有暖用,还是磁盘满的
然后pm2 info 服务进程 找到日志文件,先删了再说,空出来了10g左右的空间,然后把服务器跑起来了
然后在处理剩下的文件
sudo find . -xdev -type f -size +100M -print | xargs ls -lh | sort -k5,5 -h -r
寻找大于100m的文件,发现还有nginx的日志文件也需要清理一下。删完之后,居然还有20g左右的空间找不到占用的地方。。。
查看根目录下的所有文件夹占用
sudo du -s -h /* | sort -nr
加起来才20g 实际磁盘占用40g左右,
又是根据一番查找,发现可能是因为 进程暴毙,文件句柄占用没有被释放,然后没有释放磁盘空间
查看上面的这些进程
lsof | grep deleted
ps -p pid
拿到pid之后,可以看到 pm2托管的进程都没有释放
然后
// 这里释放服务的空间
pm2 reload 服务
// 这里释放pm2本身占用的空间
pm2 update
最后 df -h
一看,舒服了,只占用30%了