systemd-analyze dot 将单元依赖转为 Graphviz 格式生成 SVG 图,用于识别长链、循环依赖和非必要强依赖;需安装 graphviz,支持按 target 过滤、排除干扰类型,并结合 critical-chain 验证优化效果。

用 systemd-analyze dot 导出依赖图,核心是把 systemd 单元间的启动依赖关系转成 Graphviz 可读的格式,再渲染为可视化图表,从而发现冗长链路、循环依赖或非必要强依赖,为优化启动链条提供依据。
生成依赖图 SVG 文件
执行以下命令一键生成完整依赖关系图:
systemd-analyze dot | dot -Tsvg > dependencies.svg- 确保已安装
graphviz(如未装:Ubuntu/Debian 运行sudo apt install graphviz;CentOS/RHEL 用sudo yum install graphviz) - 生成后用浏览器或图像查看器打开
dependencies.svg,即可看到所有 unit(服务、target、socket 等)及其箭头连接关系
聚焦关键路径,缩小分析范围
全量依赖图可能过于庞大,建议按需过滤:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 只看某个 target 的依赖:例如
systemd-analyze dot multi-user.target | dot -Tsvg > multi-user-deps.svg - 排除无关类型单元(如 device、swap):加
--no-sysfs --no-devices参数减少干扰 - 高亮可疑长链:在 SVG 中搜索颜色深、连接多、层级深的节点,尤其是反复出现在 critical-chain 中的服务(如
NetworkManager-wait-online.service)
从图中识别可优化点
依赖图不是装饰,重点看三类结构:
-
单点强依赖:一个 service 被十几个其他单元
Wants或Requires,它一旦慢就拖垮全局——考虑是否真需要强依赖,改用After=+ 异步检查 -
隐式等待链:比如
myapp.service → network-online.target → NetworkManager-wait-online.service,若应用实际不依赖在线网络,可去掉对network-online.target的依赖 -
循环依赖痕迹:图中出现闭环箭头(A→B→C→A)说明配置错误,
systemd-analyze verify会报错,必须修正,否则可能导致启动卡死或随机失败
配合 critical-chain 验证优化效果
改完依赖后别急着重启,先验证逻辑是否合理:
- 运行
systemd-analyze critical-chain,确认最长链变短,且瓶颈单元已移除或替换 - 对比修改前后的
systemd-analyze time输出,关注 userspace 时间是否下降 - 用
systemd-analyze plot > boot-new.svg再生成一次时间线图,观察并行度是否提升、空等间隙是否减少

















