阿里云运行Laravel项目导致磁盘 Inode 用满导致的故障解决办法
Song •
2300 次浏览 •
0个评论 •
2021年08月25日
一、问题背景
在阿里云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命令查询占用问题,查询当前目录下大于800M的文件
find . -type f -size +800M
一层层的查找最终到larave项目下找到storeage/framework/cache/data目录下,发现存在大量的文件夹,里面存储的是大量的小文件(一个文件只有几 KB)。
这些大量的小文件并没有占用多少block空间,却吧inode空间占满了。
四、解决问题
停止nginx、 php-fpm,进入data目录,执行:
rm -rf storeage/framework/cache/*
或者到项目下执行
php artisan cache:clear
删除过程应该时间比较长,没办法慢慢删吧。后续你需要监控inode空间占用经常清理。
-
ubuntu 18.04安装php7.4以及通用拓展 2021-08-24 -
Mac安装使用pear/pecl快速安装PHP展库仓库 2021-08-24 -
Laravel 明明有class类找不到Class not found 2021-08-17 -
Laravel/php 7实现微信开放平台消息加解密 2021-08-16 -
Mac OS切换不同php版本以及查看当前安装的PHP版本 2021-08-14

nginx 服务器如何查看当前访问的域名