VPS开机很慢怎么定位?用systemd-analyze区分内核、服务和依赖链

不要按blame排名直接禁服务,先找关键启动链
发布于
29

VPS开机很慢,先定义“慢在什么位置”:控制台迟迟没有内核输出、系统已经启动但SSH不可用,还是SSH能登录而网站和容器仍未就绪。三种现象对应云平台、操作系统和业务服务的不同时间段,不能只看一个总启动秒数。

systemd-analyze可以拆分内核、initrd和用户空间耗时,并列出服务启动时间与关键依赖链。但blame只统计单元处于激活阶段的时间,排名靠前不等于它阻塞了整个启动过程,更不能据此直接禁用系统服务。

先建立一条可重复的开机时间线

每次测试至少记录四个时间点:在云平台执行启动或重启、控制台出现内核日志、SSH端口可连接、核心业务健康检查通过。如果第一段就很长,应先查看平台事件、宿主机维护和控制台状态;如果SSH之后业务才慢,再检查应用、容器和数据库。

时间段 常见表现 优先证据
云平台到内核启动 控制台长期无输出 平台事件、实例状态、救援控制台
内核与initrd 磁盘、文件系统或设备等待 启动控制台、内核日志、systemd-analyze time
systemd用户空间 网络、挂载或服务依赖等待 blame、critical-chain、journalctl
业务就绪 SSH可用但网站或容器未恢复 服务日志、健康检查、依赖状态

第一轮只采集,不急着改配置

systemd-analyze time
systemd-analyze blame
systemd-analyze critical-chain
systemctl --failed
journalctl -b -p warning --no-pager

time给出内核、initrd和用户空间的总体耗时;blame按单元激活时长排序;critical-chain显示通向目标单元的时间关键依赖链;systemctl --failed和本次启动日志则补充失败、超时与重试信息。

如果需要完整时间图,可以生成SVG文件后在本地查看:

systemd-analyze plot > bootup.svg

图表和排名都只反映最近一次启动。云主机首次开机、软件更新后的首次重启和缓存已热的后续启动可能不同,因此应保留测试条件,不把一次结果写成长期规律。

blame排名靠前,为什么未必是罪魁祸首

某个服务启动用了20秒,但如果它与其他任务并行运行,整机启动可能并没有因此多等20秒。真正需要关注的是:它是否出现在critical-chain中、后续关键目标是否必须等待它、日志中是否存在明确超时。

常见误判包括:

  • network-online.target等待网络就绪,但真正拖延的是底层网络服务或不可达网关;
  • 云初始化服务在等待元数据、DNS或软件源,而不是服务本身计算慢;
  • 远程挂载、失效磁盘UUID或不存在的设备让启动作业等待超时;
  • 应用服务快速启动后内部仍在迁移数据库,systemd已经视为active;
  • 失败服务反复重启,单次耗时不长,却持续占用资源并延后业务就绪。

沿关键链查看单元状态和本次启动日志

从critical-chain中选择真正影响目标的单元,再读取状态和本次启动日志。示例中的example.service必须替换为实际单元名:

systemctl status example.service --no-pager
journalctl -b -u example.service --no-pager
systemctl show example.service -p After -p Wants -p Requires

状态里若出现start operation timed out、设备不存在、挂载失败、名称解析失败或重复重启,应先修复直接原因。不要通过无限增加超时掩盖错误,也不要远程禁用SSH、网络、文件系统或云初始化相关单元。

systemd依赖的After只描述顺序,Wants和Requires描述拉起关系,三者不能互相替代。相关概念可继续查看systemd服务依赖失败的三层排查方法。

几类高频等待点怎样确认

网络就绪等待

检查实际网络管理器、默认路由、DNS和云平台注入的网卡配置。不要为了缩短启动时间直接屏蔽network-online.target,因为远程挂载、数据库和业务服务可能确实依赖可用网络。

磁盘、fsck与挂载等待

核对/etc/fstab中的UUID、设备是否存在、文件系统状态和远程挂载目标。所有修改都应在云控制台或救援模式可用的前提下进行,并先保存原文件。

服务重启风暴

如果日志中反复出现启动失败与自动重试,先停止故障扩散,再查配置、权限、端口和依赖。可参考systemd start-limit-hit与重启风暴排查。

云初始化和软件源

首次启动可能等待元数据、SSH密钥、DNS或软件包索引。应读取对应服务日志,确认任务是仍在执行、已失败还是等待外部网络,不要直接删除状态文件强制重跑。

修改后怎样证明启动真的变快

  1. 保存基线:保留修改前的time、critical-chain和关键日志。
  2. 一次只改一项:避免同时改网络、挂载和服务依赖后无法判断贡献。
  3. 保留控制台:涉及启动链的修改必须准备带外登录和回滚文件。
  4. 重复验证:在相近条件下记录多次启动,区分首次初始化与稳定状态。
  5. 检查业务:SSH更早可用不等于数据库、容器和网站已经正常。

验收标准应同时包含系统启动、远程登录和业务健康,而不是只追求systemd-analyze time中的一个较小数字。

选择VPS时也要考虑恢复入口

启动链修改错误可能让远程SSH完全不可用,因此VPS是否提供网页控制台、救援模式、快照和网络规则管理,比单次开机数字更重要。极跃圈收录的雨云云服务详情页记录的邀请码为admin01;实际控制台、快照、产品配置、优惠和使用限制以当前结算页面与服务条款为准。

生产服务器变更前应安排维护窗口和回滚方案。不要为了几秒启动时间关闭安全、存储或网络保障机制。

本文由作者原创/授权发布于极跃圈(jiyueip.com),未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 / 600
0 讨论
热门最新
总结
暂无总结

暂无数据