systemd-analyze plot > boot.svg 生成SVG时序图,横轴为时间、纵轴为服务,直观展示并行启动、阻塞间隙与长耗时单元,需用浏览器打开分析。

直接用 systemd-analyze plot 生成 SVG 图表,是观察启动并行性与阻塞关系最直观的方式。它不靠猜测,而是把每个服务的启动时间、持续时长、依赖等待都画成横轴为时间、纵轴为服务名的交互式时间线图。
导出 SVG 图表的基本操作
在终端中执行:
systemd-analyze plot > boot.svg
命令执行完成后,当前目录下会出现 boot.svg 文件。用任意现代浏览器(Chrome、Firefox、Edge)打开即可查看完整交互式图表。
⚠️ 注意事项:
- 该命令依赖
systemd-journald正常运行;若报错Failed to get unit properties: Connection timed out,先执行sudo systemctl restart systemd-journald再重试 - 终端里直接运行不加重定向,会刷出大量 XML 内容,无法阅读,务必用
> boot.svg保存 - 建议每次优化前后各保存一份 SVG(如
boot-before.svg和boot-after.svg),方便对比
从 SVG 图中快速识别优化点
打开 SVG 后,重点关注以下三类视觉特征:
- 又长又空的横向色块:比如某服务条形图显示“启动早、耗时长、但后续大片空白”,说明它可能在空等(如等待网络就绪、远程存储挂载、或随机延迟)
-
明显断层的垂直空白带:横轴时间线上出现大段无服务启动的间隙,往往意味着某个上游服务卡住(如
NetworkManager-wait-online.service超时等待 DHCP),导致下游全部串行阻塞 -
本可并行却挤在同一点启动的服务簇:多个服务几乎同时开始、同时结束,且彼此无强依赖,说明它们本可通过调整
WantedBy=或添加Before=/After=实现更早并行加载
结合其他命令交叉验证关键节点
SVG 图指出“哪里可疑”,但要确认“为什么可疑”,需联动使用:
- 对图中拖得最长的服务(如
docker.service或bluetooth.service),运行:systemd-analyze blame | grep docker查看其实际耗时排名 - 对疑似阻塞源头(如图中最早出现的大空白前最后一个服务),运行:
systemd-analyze critical-chain [unit-name]看它是否处于关键路径顶端 - 检查该服务是否被错误设置为同步依赖:
systemctl show --property=After,Requires,Wants,WantedBy [unit-name]
导出后还能做什么
SVG 不仅用于查看,还可用于协作与归档:
- 发给同事或团队,快速对齐瓶颈认知,避免文字描述歧义
- 用图像编辑工具(如 Inkscape)局部高亮标注问题区域,加注释后存入项目 Wiki
- 配合
systemd-analyze verify [unit]检查被标记服务的单元文件语法和逻辑合理性(例如是否存在循环依赖、WantedBy=缺失等)


















