systemd-journald 服务内存占用过高解决方法
使用 htop 命令查看 debian 机器的系统状况时发现 /lib/systemd/systemd-journald
占用了过高的内存。发现问题时同时也查看了其他机器,也存在这样的问题。
查了资料发现 systemd 提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。
读取日志的命令:
1 |
|
systemd-journal
的配置在 /etc/systemd/journald.conf
。
默认情况下(Storage=auto
),日志记录将被写入 /var/log/journal/
。该目录是 systemd 软件包的一部分。若被删除,systemd 不会自动创建它,直到下次升级软件包时重建该目录。如果该目录缺失,systemd 会将日志记录写入 /run/systemd/journal
。这意味着,系统重启后日志将丢失。
Storage的配置有多种选项
- 如果设置为 volatile,journal 将会保存在内存中,使用位于内存盘的
/run/log/journal
目录(会自动创建) - 如果设置为 persistent,journal 将会保存在磁盘中,使用
/var/log/journal
目录 (会自动创建),如果自动创建失败,以及针对启动早期磁盘尚未挂载成功的部分日志, 仍然记录在内存盘。 - 如果设置为 auto,那么,如果
/var/log/journal
目录存在,则使用该目录记录到磁盘,如果目录不存在(不会自动创建),则使用内存盘。 - 如果设置为 none,完全不记录任何日志(但是仍然可以转发给 rsyslog)
其他配置具体可以参考 man 5 journald.conf
解决方法
- 方法一:创建
/var/log/journal
目录,然后使用journalctl --flush
将内存中的数据写入硬盘。 - 方法二:修改
/etc/systemd/journald.conf
,配置Storage=persistent
,然后重启systemd-journald
并使用journalctl --flush
将内存中的数据写入硬盘。 - 方法三:修改
/etc/systemd/journald.conf
,配置Storage=none
,然后重启systemd-journald
。