nginx日志磁盘空间100%

  • 0、现象
  • 1、问题描述
  • 2、正确删除日志
  • 3、错误删除方式、原因、解决方法
  • 4、重启nginx


0、现象

CICD部署失败,连接拒绝

nginx 日志日期到毫秒 nginx日志满了_nginx 日志日期到毫秒

猪齿鱼到gitlab 503

nginx 日志日期到毫秒 nginx日志满了_日志文件_02


CICD出现137现象

nginx 日志日期到毫秒 nginx日志满了_日志文件_03

1、问题描述

服务器提示磁盘满了,表现如下:

nginx 日志日期到毫秒 nginx日志满了_重启_04


经查看是nginx服务器,使用 df -h 命令如下:

nginx 日志日期到毫秒 nginx日志满了_日志文件_05

考虑是被nginx日志撑满,查看日志文件大小

nginx 日志日期到毫秒 nginx日志满了_重启_06


问题确定,所以删除日志。

2、正确删除日志

echo " " > ./error.log

nginx 日志日期到毫秒 nginx日志满了_nginx 日志日期到毫秒_07

3、错误删除方式、原因、解决方法

  1. 错误删除方式
    使用rm -f删除或者xftp右键删除,删除之后云盘使用率并没有发生变化。
  2. 原因
    在linux中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink),然而如果文件是被打开的(有进程正在使用或者不断写入),那么进程将可以继续读取该文件,磁盘空间也会一直被占用无法释放。nginx日志文件在删除的时候文件正在被使用;
  3. 解决
    网上大部分资料说的都是直接重启nginx服务,没用!!!
    重启之后,是可以直接生成新的日志文件的,但原本的日志文件占用问题并没有解决
    正确方案:重启之后,杀掉使用nginx旧日志文件的进程
  • 安装lsof
yum install lsof
  • 查看使用nginx日志的进程
lsof |grep deleted
[root@local ~]# lsof |grep deleted
nginx      4401    nobody   38w      REG      253,0   19304448   10835682 /var/nginx/logs/error.log (deleted)
  • 解决:kill 4401 即可删除error.log占用的问题。

清理正在被读写的大日志文件时,直接使用 echo “” > ./xxx.log 命令,即直接将文件置空,并不影响服务的使用,文件大小也被控制下来,磁盘空间也释放了。

4、重启nginx

  1. 验证nginx配置文件是否正确
[root@localhost ~]# cd /usr/local/nginx/sbin

[root@localhost sbin]# ./nginx -t

nginx 日志日期到毫秒 nginx日志满了_nginx_08

  1. 重启nginx
    进入nginx安装目录sbin下,输入命令./nginx -s reload 即可
[root@localhost ~]# cd /usr/local/nginx/sbin
[root@localhost sbin]# ./nginx -s reload