最可能触发超时的源头是 systemd-analyze blame 输出最上方耗时≥2秒的服务,如 NetworkManager-wait-online.service 或 docker.service;该命令仅统计 ExecStart 自身执行时间,不包含依赖等待或并行延迟。

直接看 systemd-analyze blame 输出最上面几项,耗时超过 2 秒的服务就是最可能触发 Timeout 的源头。
查超时服务本身耗时
运行命令获取按启动耗时排序的服务列表:
-
systemd-analyze blame | head -n 10—— 查看前 10 名最慢服务 - 重点关注
.service单元中耗时 ≥2000ms(即 2 秒)的条目,例如:5.234s NetworkManager-wait-online.service3.890s docker.service - 注意:该命令只统计
ExecStart自身执行时间,不包含依赖等待或并行延迟
确认当前超时设置值
查清服务实际生效的超时阈值:
-
systemctl show 服务名.service | grep TimeoutStartSec—— 查看启动超时秒数(默认多为 90s) -
systemctl status 服务名—— 看 Active 状态是否为failed,并留意日志中是否有timeout或start job timed out字样 -
journalctl -u 服务名 -n 50 --no-pager—— 检查末尾几行是否在超时前卡住,比如长时间无输出、反复重试、或报Address already in use等阻塞型错误
理清依赖链定位真实瓶颈
单看耗时不能判断“为什么慢”,需结合依赖路径分析:
-
systemd-analyze critical-chain 服务名.service—— 查该服务从multi-user.target回溯的关键路径 - 输出中顶部是最后启动但最耗时的单元,底部是最先启动的前置依赖;整条链串行不可并行,任一环节延迟都会拖长总时间
- 若某依赖显示
not-found或inactive,说明它根本没运行,可能是被Condition=跳过,或未启用,此时真正问题不在超时服务本身,而在上游缺失
验证与调整超时参数
确认是真慢而非配置错后,再安全调大阈值:
- 用覆盖方式修改:
sudo systemctl edit 服务名.service - 填入:
[Service]
TimeoutStartSec=300 - 保存后执行:
sudo systemctl daemon-reload && sudo systemctl restart 服务名 - 验证是否生效:
systemctl show 服务名.service | grep TimeoutStartSec应返回新值 - 注意:过长的超时可能掩盖真实问题(如配置语法错误、路径不存在、端口冲突),建议同步检查
nginx -t、ss -tlnp或ls -l /path/to/binary等基础项


















