今天早上客户来电话,说网站不能访问了,我以为又是服务器宕机,重启服务器后还是不行,猜想应该是文件爆了,因为这个客户的服务器每天被高强度扫描,产生了大量的访问文件。于是扫描了一下硬盘目录
df -i
/dev/vda3 IUse% 100%
Inodes: 13073424 used, 1 free
提示系统文件数量达到上限,通过层级目录查找,最后定位是Docker容器目录,于量继续用命令查找多文件目录
for d in /var/lib/docker/*; do echo -n "$(basename $d): " find "$d" -xdev | wc -l done


1Panel面板创建的容器有很多目录,于是再筛选哪个目录最多文件,并属于哪个容器
du -sh /var/lib/docker/overlay2/* 2>/dev/null | sort -hr | head -20
70G /var/lib/docker/overlay2/……1f8b84994d2d
3.7G /var/lib/docker/overlay2/……dd0d4e039ca86
1.1G /var/lib/docker/overlay2/……dd41dbd59b01e
目前算是找到发生问题的容器,查找对应的容器
docker ps -aq | while read id; do
docker inspect --format '{{.Id}} {{.GraphDriver.Data.UpperDir}}' $id
done | grep 37b2c2df71db3e7bb48e8dbbc6a1b27455f1185b007c907d469b1f8b84994d2d
356cd350a272d5……eb /var/lib/docker/overlay2/37b2c2df71db3e……4d2d/diff

至此已经看到容器ID:356cd350a272,查找该容器内的多文件目录
du -sh /var/lib/docker/overlay2/37b2c2df71db3e7bb48e8dbbc6a1b27455f1185b007c907d469b1f8b84994d2d/diff/* | sort -hr | head -20
35G /var/lib/docker/overlay2/37b2c……994d2d/diff/tmp
28K /var/lib/docker/overlay2/37b2c……994d2d/diff/usr
此时得知是1Panel-php8容器的缓存目录写满了,剩下的就是进入容器清除缓存目录/tmp下的文件
docker exec -it 356cd350a272 sh find /tmp -maxdepth 1 -type f -name "sess_*" -delete

至此,文件清除完成,服务器的磁盘空间也会增加很多,剩下的就是在容器的PHP配置里面,修改 PHP session 回收策略
vi /usr/local/etc/php/php.ini
/session.gc_probability #查找代码位置
#修改如下
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
#保存退出
Esc
:wq