跳转至

Nginx问题处理

日志轮转

有时候 linux 磁盘空间已满,手动删除了大文件之后,df 查看一下发现空间占用还是 100%

lsof | grep deleted

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程在使用这个文件,例如输出日志文件等等,要理解这个问题,就需要知道 Linux 下文件的存储机制和存储结构

一个文件在文件系统中由两个部分构成:数据和指针。指针位于文件系统的 meta-data 中,数据被删除后,指针被清除,而数据部分还是存储在磁盘中,只不过数据对应的指针被清除后,文件数据部分占用的空间就可以被覆盖了。之所以出现删除大文件后,空间还没释放,就是因为有进程一直在使用这个文件的指针,日志文件,服务还在运行,导致虽然删除了日志大文件,但文件对应的指针部分由于进程锁定,并未从 meta-data 中清除,而由于指针并未被删除,那么系统就认为文件并未被删除,所以 df 查看还是 100%

Nginx 的解决方法,轮转后对进程执行,二选一:

nginx -s reopen

/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null