日志内存过高、磁盘占用过大排查解决

举报
一只牛博 发表于 2024/11/25 12:20:59 2024/11/25
【摘要】 日志内存过高、磁盘占用过大排查解决

真实案例,出现日志占用服务器磁盘过大,占用内存过高排查解决(这里仅对于我的菜鸡服务器来说2c2g的)

贴个图看下,内存已到了13.6,日志文件很大

systemd-journald 内存占用过高原因

1. 日志量过大

如果系统产生了大量的日志(如调试级别日志、频繁的错误日志或系统消息),systemd-journald 可能会将这些日志缓存在内存中,导致内存占用增加。特别是长时间运行时,未处理或清理的日志会导致内存需求持续增长。

2. 日志缓存未及时清理

journald 为了性能,可能会将部分日志信息保存在内存中,而不是立即将其写入磁盘。如果缓存的日志数据量过大,未及时清理或写入磁盘,内存占用会随之增加。

3. 长时间运行

当 systemd-journald 服务在系统中长时间运行时,即便内存中保留的日志是有限的,日志轮换机制不及时,也可能导致内存逐步被填满,尤其是在日志产生频繁的情况下。

4. 日志压缩和存储策略

journald 支持将日志压缩和存储到磁盘。如果日志压缩策略配置不当,或者大量的压缩操作未能有效执行,系统可能会在内存中处理大量的日志数据而增加内存占用。

5. 日志文件本身较大

如果日志文件生成非常迅速,未能及时清理或压缩,journald 在处理这些大文件时会消耗大量的内存资源。你提到的 /var/log/messages 文件就是典型例子,大量未处理的日志文件可能导致 journald 占用大量内存。

6. 内存泄漏

虽然较为少见,但 systemd-journald 中的某些内存泄漏问题也可能导致内存占用不断增加。某些特定的系统或 journald 版本可能会有此类问题,尤其是在长时间运行后表现明显。

优化 systemd-journald 的内存占用

修改配置

vim /etc/systemd/journald.conf

[Journal]
SystemMaxUse=200M   # 日志最大使用 200 MB 空间
SystemMaxFileSize=50M  # 每个日志文件最大 50 MB
MaxRetentionSec=1month # 日志保留时间为 1 个月

重启systemctl restart systemd-journald

定期清理日志

journalctl --vacuum-size=SIZE

这个命令允许你通过限制日志的总大小来清理日志文件。当日志文件总大小超过指定的 SIZE 时,journald 会自动删除最旧的日志文件,直到总大小降到指定限制以下。

journalctl --vacuum-size=500M

适用场景:

​ • 如果你发现 /var/log/journal 目录占用了大量磁盘空间,使用 --vacuum-size 可以有效控制日志文件的大小,避免日志文件无限制地增长。

​ • 适用于磁盘空间有限的系统,确保日志不会占满磁盘。

journalctl --vacuum-time=TIME

这个命令允许你根据日志的保留时间来清理日志文件。你可以指定一个时间阈值,journald 会删除早于该时间点的日志文件。

sudo journalctl --vacuum-time=7d

这个命令将会清理超过 7 天的日志文件,确保日志只保留过去 7 天内的数据。时间单位可以是 d(天)、h(小时)或 m(分钟)。

适用场景:

​ • 当日志不需要长时间保留时,使用 --vacuum-time 可以确保日志文件按时间轮转,防止累积过多的历史日志。

​ • 适用于对历史日志时效性要求高的系统,清理过期日志以释放空间。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。