前置问题
阿里云服务器上部署了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 就表示了日志的存储地址。
以上方法参考了以下文章:
https://blog.youkuaiyun.com/zzyzenith/article/details/84327993
Linux系统查看文件夹大小,并按照从大到小排列~ - 知乎 (zhihu.com)
日志管理-rsyslogd服务(/etc/rsyslog.conf 配置文件)-优快云博客
【Linux】rsyslog日志服务(配置,测试、日志转储)-优快云博客