服务器磁盘报警 | 豆包MarsCode AI刷题

55 阅读2分钟

前置问题

阿里云服务器上部署了springboot服务,将服务放在/etc/systemd/system路径下,并使用systemctl启动服务,在Service脚本中设置了工作路径为/root,代码运行的日志放在了/root/logs中 问题:阿里云服务器磁盘总是报警,某个文件占用空间增长速度过快

排查磁盘占用情况 使用du命令查看文件夹大小,然后使用sort命令排列,组合起来如下:

du -sh * | sort -rh

解释一下这个命令:

du 命令用于估算文件或文件夹的磁盘使用情况。 -s 选项用于显示文件夹的总大小,而不显示其子文件夹的详细信息。 -h 选项用于以人类可读的格式显示文件夹大小(例如,使用KB,MB,GB等单位)。

  • 通配符表示当前目录下的所有文件夹。 sort 命令用于排序输出结果。 -r 选项用于反向排序,即从大到小排列。 -h 选项用于人类可读的排序,以便正确地处理文件夹大小的单位。 如图所示,可知var目录占用最多,进入var目录继续排查,最终确定log文件夹占用了较大空间,在里面发现messages开头的文件和我自己部署的SpringBoot服务的/root/log中的文件内容一模一样,说明Linux系统保存了两份日志

解决方案 停止系统日志写入 查看系统日志的配置,打开 /etc/rsyslog.conf,找到以下配置:

*.info;mail.none;authpriv.none;cron.none /var/log/messages

改为:

*.none /var/log/messages

保存后,重启:

systemctl restart rsyslog

查看是否修改 通过ll命令查看最近修改时间,发现文件停止写入了

或者可以使用tail -f /var/log/messages命令查看最后日志写入时间,也可以查看是否停止写入了

为什么出现这个原因 /etc/rsyslog.conf文件中的配置, 日志服务的配置文件中主要定义了服务的名称、日志等级和日志记录位置。

*.info;mail.none;authpriv.none;cron.none /var/log/messages

解释一下这个命令:

  • 表示所有服务。 info 表示日志等级为info,当日志等级大于等于info,都将日志写入后面那个路径 ; 选项用户分割不同的服务和日志等级,none表示没有重要级,忽略这个日志服务,该服务的所有日志都不再记录。 /var/log/messages 就表示了日志的存储地址。

通过以上方法就可以解决服务器磁盘报警问题,究其原因就说log日志太大,占用的空间太多,通过一些命令可以进一步查看是哪些文件过大