mkdir: cannot create directory ‘/sdc’: No space left on device和Warning: session_start(): open(/var/l

PHP写的网站出现报错,我的服务器系统是ubuntu18

Warning: session_start(): open(/var/lib/php/sessions/sess_lis1vnf4as8ffb85sghjp1t2v0, O_RDWR) failed: No space left on device (28) in /home/xxxx/Controller.php on line 16

服务器连接不上,重启服务器后,想创建文件夹或者文件都会提示空间不够

mkdir: cannot create directory ‘/sdc’: No space left on device

使用df -h命令发现空间还有,但是就是显示磁盘空间不够

Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  9.1M  387M   3% /run
/dev/vda1        40G   14G   24G  37% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M     0  396M   0% /run/user/0

后来参考了一篇文章https://blog.csdn.net/weixin_45607084/article/details/107436712
发现是系统盘inode 即索引节点占用满了,什么是索引节点可以点击链接看一下她这篇文章的内容。
使用命令查看df -i,果真是索引节点被占满了,IUse占用100%

Filesystem      Inodes   IUsed  IFree IUse% Mounted on
udev            500247     415 499832    1% /dev
tmpfs           505739    1314 504425    1% /run
/dev/vda1      2621440 2621440      0  100% /
tmpfs           505739       1 505738    1% /dev/shm
tmpfs           505739       4 505735    1% /run/lock
tmpfs           505739      16 505723    1% /sys/fs/cgroup
tmpfs           505739       5 505734    1% /run/user/0

于是,参考链接找到对应目录使用最多的文件夹

for i in /*; do echo $i ; find $i | wc -l; done

上述命令一直递进找,例如我这找到的是/var目录下文件最多

/proc
72763
/root
42
/run
1321
/sbin
227
/snap
2
/srv
1
/sys
60983
/tmp
10
/usr
123283
/var
2198876
/vmlinuz
1
/vmlinuz.old
1

然后修改上述代码,继续查找,如下

for i in /var/*; do echo $i ; find $i | wc -l; done

一直找,我是最终找到了php下的sessions文件夹中,发现占用了两百多万个目录

/var/lib/php/modules
106
/var/lib/php/sessions
2185349

这里我直接用rm -rf *但是太多文件了,删不掉

bash: /bin/rm: Argument list too long

可以使用命令

ls | xargs -n 10 rm -fr ls

命令解释为:输出所有的文件名(用空格分割) xargs就是将ls的输出,每10个为一组(以空格为分隔符),作为rm -rf的参数也就是说将所有文件名10个为一组,由rm -rf删除
删除结束后再此查看sessions的目录数量,并且查看整体的Inode占用比,可以发现已经正常

root@ecs-c6s-large-2-linux-20201130215441:/var/lib/php/sessions# for i in /var/lib/php/sessions/; do echo $i ; find $i | wc -l; done
/var/lib/php/sessions/
1409
root@ecs-c6s-large-2-linux-20201130215441:/var/lib/php/sessions# df -i
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            500247    415  499832    1% /dev
tmpfs           505739   1313  504426    1% /run
/dev/vda1      2621440 437525 2183915   17% /
tmpfs           505739      1  505738    1% /dev/shm
tmpfs           505739      4  505735    1% /run/lock
tmpfs           505739     16  505723    1% /sys/fs/cgroup
tmpfs           505739      5  505734    1% /run/user/0

这里恢复正常了,网站也能够正常访问了,基本问题解决,但是为了避免session再次产生这种问题,设置一个自动删除shell脚本,1小时清理一次,清理大于5个小时的session文件。
在目录/etc/cron.hourly下创建session文件
写入如下代码

find /tmp/session -amin +300 -exec rm -rf {} \;

在这里插入图片描述
然后重启cron服务

root@ecs-c6s-large-2-linux-20201130215441:/etc/cron.hourly# pgrep cron
784
root@ecs-c6s-large-2-linux-20201130215441:/etc/cron.hourly# service cron restart
root@ecs-c6s-large-2-linux-20201130215441:/etc/cron.hourly# pgrep cron
27927

发现端口号变了,重启成功,这样下来Session就不会多的太厉害。问题解决。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖安大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值