今天服务器上的 TP 项目出现如下报错:
file_put_contents(): Only 0 of 1183 bytes written, possibly out of free disk space
一看就是磁盘被占满了,运行命令查看
df -h

一般的思路就是找出大文件删除之,于是 cd 进入目录运行如下命令:
du -h --max-depth=1

可是,总共占用也才十个多G,怎么会有48个G,货不对板嘛,于是运行:
lsof |grep delete
终于找到这被偷吃的空间:

原来系统运行中的进程产生的文件被删除,并不会释放磁盘空间,需要杀死这个文件对应的进程才会释放。
lsof 命令的表头为:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
百度百科上对该表头的解释为:
每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件。lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
本文详细记录了服务器上ThinkPHP项目遇到磁盘空间不足错误的排查与解决过程,通过lsof命令揭示了被进程占用但未释放的磁盘空间问题。
5958





