CentOS 7 上的 journald 内存使用情况

CentOS 7 上的 journald 内存使用情况

我有一个 AWS EC2 实例,运行带有服务器应用程序的 CentOS 7.7.1908 (systemd 219)。服务器将大量信息记录到系统日志中(使用 syslog)。

我最近使用以下方法启用了系统日志的持久存储这个答案自那以后,systemd-journald 的内存消耗不断增长。

经过一整天的时间,systemd-journald最终使用了超过 250M 的 RAM。

我做了一个快速测试来确认 journald RAM 使用量确实在增长。

测试 :

  • 获取systemd-journald内存使用情况
  • 使用以下方式将一组数据记录到系统日志中logger
  • 获取systemd-journald内存使用情况
  • 使用以下方法将内存日志(如果有)刷新到 /var/log/journaljournalctl --flush
  • 重启systemd-journald服务
  • 获取systemd-journald内存使用情况

结果 :

# ps aux | grep journald | grep -v grep
root     23963  0.0  0.1  61320  2500 ?        Ss   15:03   0:00 /usr/lib/systemd/systemd-journald
# for i in {0..7000}; do logger -t TEST -p err `python -c 'print "A"*1000'`; done;
# ps aux | grep journald | grep -v grep
root     23963  0.1  0.2  69512 11964 ?        Ss   15:08   0:00 /usr/lib/systemd/systemd-journald
# journalctl --flush
# ps aux | grep journald | grep -v grep
root     23963  0.1  0.2  69512 11964 ?        Ss   15:08   0:00 /usr/lib/systemd/systemd-journald
# systemctl restart systemd-journald
# ps aux | grep journald | grep -v grep
root     24237  0.0  0.1  55416  2492 ?        Ss   15:08   0:00 /usr/lib/systemd/systemd-journald

记录大约 7M 的数据后,内存使用量从 2.5M 增加到将近 12M。重新启动守护进程后,内存使用量将恢复到约 2.5M。

我的解释:

  • systemd-journald内存使用量与其处理的数据量成正比。
  • 该参数RuntimeMaxUse不限制此内存使用量。
  • 重新启动systemd-journald会清除缓冲区,我无法配置其大小。
  • 对于可使用的内存量没有可配置的限制systemd-journald
  • 内存使用不是由于等待刷新到磁盘的日志造成的。

我的journald.conf:

[Journal]
#Storage=auto # /var/log/journal is created and used, so this is equivalent to 'Persistent'
SyncIntervalSec=1m
RateLimitInterval=0
RateLimitBurst=0
SystemMaxUse=4G
RuntimeMaxUse=1M

我怎样才能解决这个“泄漏”,而不需要每天重启服务?

相关内容