阿里云运行Laravel项目导致磁盘 Inode 用满导致的故障解决办法

Song190 次浏览0个评论2021年08月25日
阿里云运行Laravel项目导致磁盘 Inode 用满导致的故障;Laravel storage缓存文件导致 Inode 出现failed to open stream: No space left on device

一、问题背景

在阿里云ubuntu服务器上运行laravel项目

二、发现问题

客户反应服务打不开;查看日志,发现有大量的failed to open stream: No space left on device的错误。使用df -h查看,磁盘还有 30G 空间,按道理不应该出现这个错误。

Filesystem      Size  Used Avail Use% Mounted on
udev            3.8G     0  3.8G   0% /dev
tmpfs           770M  692K  769M   1% /run
/dev/vda1        40G  5.9G   32G  16% /
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
tmpfs           770M     0  770M   0% /run/user/0

三、查找问题

磁盘空间明明还有,但提示空间不足。遂使用df -i查看了一下inode 的使用情况。

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            977277    414  976863    1% /dev
tmpfs           984635    593  984042    1% /run
/dev/vda1      2621440 2621433 7    100% /
tmpfs           984635      2  984633    1% /dev/shm
tmpfs           984635      2  984633    1% /run/lock
tmpfs           984635     18  984617    1% /sys/fs/cgroup
tmpfs           984635     21  984614    1% /run/user/0

发现inode已经用满了,从而导致系统无法创建文件。以至于系统抛出No space left on device错误。

1、什么是inode

Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

参考 理解inode

2、找到什么占用了inode

我们通过Liux命令查询占用问题

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

一层层的查找最终到larave项目下找到storeage/framework/cache/data目录下,发现存在大量的文件夹,里面存储的是大量的小文件(一个文件只有几 KB)。

这些大量的小文件并没有占用多少block空间,却吧inode空间占满了。

四、解决问题

停止nginxphp-fpm,进入data目录,执行:

rm -rf storeage/framework/cache/*

或者到项目下执行

php artisan cache:clear

删除过程应该时间比较长,没办法慢慢删吧。后续你需要监控inode空间占用经常清理。

请登录后评论
    当前暂无评价,快来发表您的观点吧...
    公告提示
    本站主要用于学习交流Laravel技术,分享Laravel优秀案例;同时非常欢迎大家投稿哦!如果有招聘信息也可以联系我我帮忙发布哦!