定位开机慢需聚焦“谁拖、为何拖、拖在哪”,用systemd-analyze查kernel/userspace耗时,再用blame找耗时>2s服务,critical-chain追溯依赖链瓶颈,最后用status和journalctl验证具体服务状态与日志。

排查开机启动项加载缓慢,关键不是看“有哪些服务”,而是看“谁在拖、为什么拖、拖在哪一环”。系统自带工具就能准确定位,不需要第三方软件。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
查总耗时与分段瓶颈
先运行:
systemd-analyze
它会显示两段耗时:kernel(内核加载)和 userspace(systemd 启动服务阶段)。如果 kernel 超过 5 秒,问题大概率在硬件驱动或 initramfs;如果 userspace 明显偏长(比如 >30 秒),说明是服务启动环节出了问题。
定位耗时最长的服务
接着执行:
systemd-analyze blame | head -15
它按启动耗时倒序列出所有单元。重点关注耗时 >2s 的 .service 或 .mount 单元。常见拖慢项包括:
• NetworkManager-wait-online.service(等网络超时)
• apt-daily.service(Ubuntu 自动更新检查)
• ModemManager.service(有无蜂窝模块都可能卡住)
• 某个 .mount 单元(对应 /etc/fstab 中挂载失败的设备)
追踪依赖链上的真实卡点
单看 blame 容易误判。比如 ssh.service 耗时久,未必是 SSH 本身慢,而是它前面某个依赖卡住了。用这个命令挖根:
systemd-analyze critical-chain
它会输出一条最长依赖路径,例如:
multi-user.target → nginx.service → network-online.target → NetworkManager-wait-online.service
每级后面标有延迟时间。真正瓶颈通常在链尾那个“等网络就绪”或“等挂载完成”的服务里。
验证具体服务状态与日志
对可疑单元,进一步确认:
• systemctl status xxx.service —— 看 Active 状态是否为 activating (start),以及 Loaded 行是否提示找不到单元或配置错误
• journalctl -u xxx.service --since "boot" —— 查它本次启动的完整日志,注意是否有 timeout、failed to start、no route to host 等关键词
• 若是挂载类问题,同步检查:sudo blkid 和 findmnt -D,比对 /etc/fstab 中的 UUID 或路径是否真实存在、是否已连接










