需用systemd-analyze等工具分析启动耗时分布:一查整体与服务耗时;二析内核/initrd阶段;三检桌面服务延迟;四比不同启动模式;五导出快照供离线分析。

如果您希望了解银河麒麟操作系统从加电到桌面就绪的完整耗时分布,定位拖慢启动过程的具体服务或阶段,则需借助系统内置的分析工具与日志机制。以下是开展此项分析的具体步骤:
一、使用systemd-analyze查看整体启动时间与瓶颈服务
systemd-analyze 是 systemd 提供的原生启动性能分析命令,可快速获取总启动耗时、各阶段分解时间及按耗时排序的服务列表,适用于所有基于 systemd 的麒麟OS版本(V10 及以上)。
1、打开终端(Ctrl+Alt+T)。
2、执行命令获取系统总启动时间:systemd-analyze。
3、执行命令列出各服务启动耗时排名(由高到低):systemd-analyze blame。
4、执行命令查看启动各阶段耗时分解(如 firmware、loader、kernel、initrd、userspace):systemd-analyze time。
5、执行命令生成可视化启动流程图(需安装 graphviz):systemd-analyze plot > boot-time.svg,随后可用图像查看器打开该 SVG 文件。
二、分析内核与 initrd 阶段耗时
该方法聚焦于内核加载与初始 RAM 磁盘解压执行阶段,可识别驱动加载延迟、模块初始化阻塞等问题,尤其适用于更换硬件后启动变慢的场景。
1、在终端中运行:systemd-analyze critical-chain,查看关键路径上各单元依赖链及其累计耗时。
2、检查内核日志中早期启动信息:dmesg -t | head -n 50,观察是否有重复 probe、超时等待或驱动挂起提示。
3、单独提取 initrd 阶段耗时:systemd-analyze log-level=debug | grep "initrd"(若启用 debug 日志)。
4、确认 initrd 是否包含冗余模块:执行 lsinitrd /boot/initrd.img-$(uname -r) | grep -E "(driver|module)" | wc -l,数值显著高于 300 时建议精简。
三、检查桌面环境服务启动延迟
此方法用于诊断 UKUI 或其他桌面会话启动缓慢的原因,涵盖 .desktop 自启项、D-Bus 激活服务及图形会话初始化组件,适用于用户登录后仍长时间显示欢迎界面或壁纸未加载完成的情形。
1、切换至目标用户,执行:systemd-analyze --user blame,查看用户级服务耗时排序。
2、检查桌面会话关键单元状态:systemctl --user status graphical-session.target。
3、列出当前用户所有自启 .desktop 文件:ls ~/.config/autostart/ /etc/xdg/autostart/ 2>/dev/null | grep "\.desktop$"。
4、禁用可疑自启项后测试:将对应 .desktop 文件移出 autostart 目录,或在其内部添加 X-GNOME-Autostart-enabled=false 行。
四、比对不同启动模式下的耗时差异
通过对比正常启动、恢复模式与最小化启动(rescue.target)的时间差异,可判断问题是否集中于多用户服务层或图形子系统,有助于排除 BIOS/UEFI 或内核层干扰。
1、重启进入 GRUB 菜单,按 'e' 编辑启动项,在 linux 行末尾添加空格及 systemd.unit=rescue.target,按 Ctrl+X 启动。
2、在 rescue 模式下执行:systemd-analyze,记录 userspace 时间。
3、返回正常启动后再次执行:systemd-analyze,计算差值。
4、若差值超过 8 秒,且 systemd-analyze blame 中 top5 均属 graphical-session.target 依赖项,则问题定位于桌面服务链。
五、采集并导出启动性能快照
该方法生成结构化启动数据包,便于离线分析、跨版本比对或提交给技术支持团队,包含服务状态、日志截片、单元依赖图等完整上下文。
1、确保已安装 systemd-analyze 工具包(通常默认存在),执行:systemd-analyze dump > boot-dump.txt。
2、导出最近一次启动的 journal 日志片段:journalctl -b -o json > boot-journal.json。
3、提取关键服务启动时间戳(例如 gdm、ukui-panel):journalctl -b | grep -E "(gdm|ukui-panel|dbus|systemd-user-sessions)" | head -n 20。
4、压缩打包:tar -czf boot-profile-$(date +%Y%m%d).tar.gz boot-dump.txt boot-journal.json。










