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或软件包索引。应读取对应服务日志,确认任务是仍在执行、已失败还是等待外部网络,不要直接删除状态文件强制重跑。
修改后怎样证明启动真的变快
- 保存基线:保留修改前的
time、critical-chain和关键日志。 - 一次只改一项:避免同时改网络、挂载和服务依赖后无法判断贡献。
- 保留控制台:涉及启动链的修改必须准备带外登录和回滚文件。
- 重复验证:在相近条件下记录多次启动,区分首次初始化与稳定状态。
- 检查业务:SSH更早可用不等于数据库、容器和网站已经正常。
验收标准应同时包含系统启动、远程登录和业务健康,而不是只追求systemd-analyze time中的一个较小数字。
选择VPS时也要考虑恢复入口
启动链修改错误可能让远程SSH完全不可用,因此VPS是否提供网页控制台、救援模式、快照和网络规则管理,比单次开机数字更重要。极跃圈收录的雨云云服务详情页记录的邀请码为admin01;实际控制台、快照、产品配置、优惠和使用限制以当前结算页面与服务条款为准。
生产服务器变更前应安排维护窗口和回滚方案。不要为了几秒启动时间关闭安全、存储或网络保障机制。






