systemd-analyze blame 按耗时从高到低列出已成功启动的 unit,首项常为瓶颈;critical-chain 展示最长依赖路径定位卡点;plot 生成 SVG 时序图可视化并行与阻塞。
systemd-analyze blame 看哪些服务拖慢启动
开机慢,不是靠猜,是看谁真在后台卡着。直接运行
,它会按耗时从高到低列出所有已启动的 unit(主要是 .service),排第一的那个,八成就是瓶颈。
注意:只显示「已成功启动」的服务;失败或跳过的不会出现。如果某个服务明明该启却没启,它不会出现在列表里,别误以为它不重要。
加
避免卡在 less 里:
想看前 10 个最慢的?用
某些服务启动时间含“随机延迟”(比如
),实际每次启动可能波动较大,别单看一次结果就下结论
systemd-analyze critical-chain 定位启动依赖链路
一个服务慢,未必是它自己写得差,可能是它等的上游太慢。用
能打出从
到最终目标(比如
)之间最耗时的那条依赖路径。
输出里每行是一个 unit,时间是它自身启动耗时(不含依赖项),箭头方向是依赖关系。关键看链条顶端那个单位——如果它是
,大概率是网络没通导致卡住。
可指定具体服务查它的关键路径:
若某 service 显示
,说明它根本没被加载(可能被 masked、disabled 或配置文件缺失)
注意
不等于完整依赖图,它只取“最长路径”,其他并行分支不会展开
systemd-analyze plot 生成启动时序 SVG 图
文字看不清依赖重叠和并行程度?
输出一个 SVG,横轴是时间,每行是一个 unit,颜色区分状态(绿色=成功,红色=失败),能一眼看出哪些服务在抢资源、哪些被堵死。
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
适合发给同事快速对齐问题,也方便存档比对优化前后差异。但别直接在终端里打开——它输出的是 XML 内容,要重定向保存再用浏览器打开。
保存为文件:
浏览器打开
即可查看交互式图表
如果输出为空或报错
,说明 systemd-journald 没跑稳,先
再试
禁用非必要服务前先确认依赖和用途
看到某个 service 耗时长就想
?小心踩坑。很多服务看似无关,实则被其他 unit 依赖(比如
可能被
Requires),盲目禁用会导致网络或登录失败。
真正安全的操作顺序是:先查依赖 → 再查是否真被使用 → 最后决定禁用还是 mask。
查谁依赖它:
查它依赖谁:
确认当前没在用:
(返回 inactive 才算空闲)
禁用 ≠ 删除;如需彻底阻止启动,用
(但恢复麻烦,慎用)
系统启动项不是越少越好,而是“该等的等,不该等的不等”。依赖关系和实际用途比启动耗时数字更关键。
systemd-analyze blame--no-pagersystemd-analyze blame --no-pagersystemd-analyze blame | head -n 10RandomDelaySec=systemd-analyze critical-chaindefault.targetmulti-user.targetNetworkManager-wait-online.servicesystemd-analyze critical-chain sshd.servicenot foundcritical-chainsystemd-analyze plotsystemd-analyze plot > boot.svgboot.svgFailed to get unit properties: Connection timed outsystemctl restart systemd-journaldsystemctl disableModemManagerNetworkManagersystemctl list-dependencies --reverse --type=service xxx.servicesystemctl list-dependencies --type=service xxx.servicesystemctl is-active xxx.servicesystemctl mask xxx.service