当前位置: 首页>后端>正文

Linux-磁盘空间占满解决

关键词:
df -h命令、
du -h / | sort -h命令、
rm -rf *.log.2023-08-*.gz命令、
lsof | grep deleted命令、
echo > /usr/local/nginx/logs/access.log命令

1.背景

双节(中秋节国庆节)后第一个工作日,现场反馈点餐后勤端昨天晚上还可以正常登录,但今天使用同样的账密,提示“账号密码错误!”,并且多次登录失败后,验证码图片也加载不出来了。

2. 定位问题

Step1:
???首先猜测是哪位管理员把密码悄悄变更了,但是没有通知。后来通过去点餐线上数据库中查询,发现账密均正确。所以排除了这种可能。
???另外,还额外查看了线上的3台线上服务器,服务进程都正常启动着。
???除此之外,额外发现一个现象:线上的3台服务器的 manage.log,使用tail命令实时打印,发现登录请求日志打印很少,偶尔不打印。

Step2:
???后来经过同事提醒,使用df -h命令查看了下服务器磁盘,发现磁盘占用100%了。因为磁盘满了导致日志无法写入、验证码图片无法展示出来,影响了正常的业务执行。

3. 解决

???既然磁盘占用100%了,使用du -h / | sort -h命令,查找磁盘大文件(一般是业务发布备份jar包、业务logs日志、nginx的access.log等)。
???后来经过排查,
Step1:
业务日志/opt/touchorderv3/apps/logs
因为日志很多,无法一个一个使用echo > xxx.log命令,所以使用了rm -rf *.log.2023-08-*.gz命令。但是删除完毕后,df命令查看时磁盘还是占用很多,使用lsof | grep deleted命令查看很多已经删除了,但是因为服务进程id关联,导致磁盘空间未真正释放。后来下了华为云负载,kill/restart下服务进程即可。
Step2:
nginx的访问日志/usr/local/nginx/logs/access.log占用空间很大,高达5.7G。使用echo > /usr/local/nginx/logs/access.log命令。清空指定文件的内容,而不必删除文件或重启nginx。新的日志继续追加在文件中,但之前的内容被清空。

4. 文章参考

1. Linux系统通过df和du查看磁盘使用的大小不一致问题及解决方法


https://www.xamrdz.com/backend/3vx1930920.html

相关文章: