systemd-journal-flush.service 有什么用途?

systemd-journal-flush.service 有什么用途?

它减慢了我的系统启动时间。

我可以禁用它吗?

如果我在启动时禁用它会发生什么?

我正在使用 Ubuntu 版本 18.04。

答案1

如果启用了存储,则要求systemd-journal-flush.service日志守护程序将存储在 /run/log/journal 中的所有日志数据刷新到 /var/log/journal。persistent如果您有(已经)巨大的日志文件,这将导致启动速度变慢。此外,磁盘(带有/var/log)必须以可写模式安装才能执行此操作。

总结一下:巨大的旧日志文件,在启动时进行检查,并附加新的日志数据会导致启动时间变慢。

要检查 journalctl 日志大小类型

journalctl --disk-usage

为了获取刷新处理的时间和磁盘空间信息,请输入以下命令

journalctl -b --unit systemd-journald

相应的输出将如下所示

-- Logs begin at Sat 2018-12-08 00:40:23 CET, end at Mon 2018-12-10 19:40:27 CET. --
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Journal started
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Runtime journal (/run/log/journal/265c93c062bf4c8da41abfe2ae793452) is 4.7M, max 38.3M, 33.5M free.
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: Time spent on flushing to /var is 7.066904s for 132 entries.
Dec 10 12:51:38 ubuntu01 systemd-journald[479]: System journal (/var/log/journal/265c93c062bf4c8da41abfe2ae793452) is 128.0M, max 256.0M, 128M free.

您可以

  • 禁用该服务(不推荐)

    那么可能并非所有日志数据都写入磁盘;在调试启动故障时很烦人。Journald 是systemdLinux 和许多其他服务都依赖于它。

  • 验证日志文件的内部一致性:

      journalctl --verify
    

    注意每本日记都会出现经过

  • 使用journalctl --vacuum命令

    journalctl -h

    --vacuum-size=BYTES 将磁盘使用量减少到指定大小以下
    --vacuum-files=INT 仅保留指定数量的日志文件
    --vacuum-time=TIME 删除超过指定时间的日志文件

    因此做一个

      sudo journalctl --vacuum-size=1G --vacuum-time=5d --vacuum-files=5
    
  • 更改存储类型systemd-journal-flush.service

    首先使用以下命令检查您的存储类型:

         systemctl cat systemd-journal-flush.service  | grep -i storage
    

    man journald.conf

    存储=

    控制日志数据的存储位置。可选为“挥发性”、“持久性”、“自动”或“无”。

    如果 ”易挥发的“,日志数据将只存储在内存中,即/run/log/journal 层次结构之下(如果需要则创建)。

    如果 ”执着的“,数据将最好地存储在磁盘上,即在/var/log/journal 层次结构(如果需要则创建)之下,并在早期启动期间以及如果磁盘不可写时回退到/run/log/journal(如果需要则创建)。

    汽车“类似于“持久”,但如果需要,则不会创建目录 /var/log/journal,因此它的存在控制着日志数据的去向。

    没有任何“关闭所有存储,所有收到的日志数据将被删除。但是,转发到其他目标(例如控制台、内核日志缓冲区或 syslog 套接字)仍将有效。默认为“自动”。

    编辑文件

    sudo nano /etc/systemd/journald.conf

    在日志部分取消注释并修改:

    存储=自动SystemMaxUse=200M SystemKeepFree=1G
    SystemMaxFileSize=1G SystemMaxFiles=5

推荐

我建议限制系统最大文件大小50MB 的密钥 -->

SystemMaxFileSize=50M

最后,如果您的 Ubuntu 不是在重要的服务器上运行,我建议将数据存储更改为易失性:

Storage=volatile

SystemMaxUse控制日志最多可以使用多少磁盘空间。

SystemKeepFreeRuntimeKeepFree控制 systemd-journald 应为其他用途留下多少磁盘空间。systemd-journald 将尊重这两个限制并使用两个值中较小的一个。

如果您在调试模式下运行启动并跟踪系统调用(strace),您可能会发现刷新写入的 I/O 性能非常差。就我而言,原因尚不清楚。也许一些内核消息会向日志文件发送垃圾邮件(请注意,在 10000 条消息之后,默认情况下该单元会被阻止,但 journald 必须管理这一点,这可能导致性能不佳)。在这种情况下,跳过消息并搜索错误,这些错误不一定被标记为错误。

journalctl -b --output short-monotonic

journalctl -b -p 1..4 --output short-monotonic

--output short-monotonic标志打印与默认 UTC 时间对比的时间步骤。

最后,删除旧的日志文件

sudo rm -rf /var/log/journal

保存并重新启动。

答案2

根据这篇文章systemd 开发者主页,你可以通过改变单元文件

为此,请打开/lib/systemd/system/systemd-journal-flush.service,例如

sudo vim /lib/systemd/system/systemd-journal-flush.service

并改变依赖之前

 Before=systemd-user-sessions.service systemd-tmpfiles-setup.service

 Before=systemd-tmpfiles-setup.service

此修复将针对 systemd 版本 > v240 自动更改。

不要忘记保存文件。

相关内容