Linux systemd-analyze 启动优化

6次阅读

systemd-analyze 是诊断启动性能的核心工具,通过 blame、critical-chain、plot 和 verify 等子命令精准定位耗时单元与依赖瓶颈,指导针对性优化。

Linux systemd-analyze 启动优化

systemd-analyze 是 systemd 系统中诊断启动性能的核心工具,它不直接“优化”系统,但能精准定位拖慢开机的单元(服务、挂载、套接字等),是启动优化的第一步。

查清谁最耗时:用 analyze blame 和 critical-chain

开机慢?先看耗时大户:

  • systemd-analyze blame:按初始化耗时从高到低列出所有已启动单元。重点关注耗时 >500ms 的服务,比如 docker.serviceNetworkManager-wait-online.service 或自定义脚本。
  • systemd-analyze critical-chain:显示启动路径中最长依赖链(即决定整体启动时长的关键路径)。它会逐级展开,比如 multi-user.target → sshd.service → network-online.target → NetworkManager-wait-online.service —— 如果其中某环卡住,整条链就拖慢全局。

识别无效依赖与启动瓶颈

很多慢启动源于隐式依赖或同步等待:

  • systemd-analyze plot > boot.svg:生成 SVG 时间线图,直观看到哪些服务并行启动、哪些被阻塞、哪些在空等(如等待网络就绪)。打开 SVG 文件可快速定位“长条+空白”的可疑单元。
  • systemd-analyze verify [unit]:检查特定服务单元语法和逻辑问题,例如循环依赖、缺失 WantedBy=、或错误使用 After= 而未配 Requires= 导致启动顺序失效。

针对性优化常见拖慢项

确认问题单元后,再动手调整,避免盲目禁用:

  • NetworkManager-wait-online.service:默认要求“网络完全就绪”才继续,常因 DHCP 超时卡住。若无需联网即启动服务,可禁用:sudo systemctl disable NetworkManager-wait-online.service;或改用更轻量的 systemd-networkd-wait-online.service 并缩短超时:sudo systemctl edit systemd-networkd-wait-online.service,添加 [Service] ExecStart= 覆盖原命令,加 --timeout=10
  • 无关服务开机自启:用 systemctl list-unit-files --state=enabled 检查,对非必要服务(如 bluetooth.serviceModemManager.service)执行 sudo systemctl disable [service]
  • 挂载远程/慢速存储:检查 /etc/fstab 中是否含 _netdev 缺失或 nofail 漏配的 NFS/CIFS 条目,这些可能阻塞启动。建议加 x-systemd.automount 改为按需挂载。

验证优化效果

每次调整后必须实测:

  • 重启后运行 systemd-analyze 查总耗时(如 “Startup finished in 3.2s”);
  • 对比前后 blame 输出,确认目标服务耗时下降或消失;
  • systemd-analyze log-level=debug(需提前配置)捕获详细日志,排查是否引入新延迟。

不复杂但容易忽略:优化不是删得越多越好,而是让关键服务更快就绪、非关键服务异步或延后。systemd-analyze 提供的是证据,决策靠理解依赖逻辑。

text=ZqhQzanResources