日志内存过高、磁盘占用过大排查解决
真实案例,出现日志占用服务器磁盘过大,占用内存过高排查解决(这里仅对于我的菜鸡服务器来说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 可以确保日志文件按时间轮转,防止累积过多的历史日志。
• 适用于对历史日志时效性要求高的系统,清理过期日志以释放空间。
- 点赞
- 收藏
- 关注作者
评论(0)