如何分析启动耗时 systemd-analyze诊断工具

发布时间 - 2025-08-12 00:00:00    点击率:

首先运行systemd-analyze查看总启动时间,判断问题是出在内核阶段还是用户空间阶段;2. 使用systemd-analyze blame列出各服务启动耗时,找出耗时过长的服务;3. 通过systemd-analyze critical-chain分析关键路径,识别串行瓶颈服务;4. 必要时使用systemd-analyze plot生成svg图表可视化启动过程;5. 根据分析结果禁用非必要服务、调整服务启动顺序或优化配置以提升启动速度。

在 Linux 系统中,系统启动速度是衡量系统性能的重要指标之一。当发现开机变慢时,可以使用

systemd-analyze
工具来诊断启动耗时,找出拖慢启动过程的关键环节。这个工具是 systemd 提供的内置分析功能,能帮助我们快速了解系统从开机到进入用户空间的整个时间分布。

一、查看整体启动时间:
systemd-analyze

最简单的用法是直接运行:

systemd-analyze

输出示例:

Startup finished in 5.234s (kernel) + 8.765s (userspace) = 13.999s

这行信息告诉我们:

  • 内核启动耗时 5.234 秒(从 BIOS 交出控制权到 initramfs 完成)
  • 用户空间启动耗 8.765 秒(从 systemd 启动到默认目标(如 multi-user.target 或 graphical.target)就绪)
  • 总共耗时约 14 秒

这是第一步,判断问题出在内核阶段还是用户空间阶段。

二、分析服务启动耗时:
systemd-analyze blame

如果用户空间耗时较长,可以进一步查看哪些服务拖慢了启动:

systemd-analyze blame

输出示例:

  3.212s nginx.service
  2.876s docker.service
  1.543s app-server.service
  800ms  NetworkManager-wait-online.service
   ...

这个列表按耗时从高到低排序,清楚显示每个服务的启动时间。重点关注耗时超过 1 秒的服务。

常见“拖后腿”的服务包括:

  • NetworkManager-wait-online.service
    :等待网络连通,容易卡住启动(尤其在无网络或网络慢的环境)
  • 某些自定义应用服务或数据库服务(如 MySQL、Redis)
  • Docker 及其依赖服务(启动容器多时会很慢)

优化建议:

  • 对非关键服务使用
    Type=oneshot
    或延迟启动(通过
    Wants=
    +
    After=
    控制顺序)
  • 禁用不必要的服务:
    sudo systemctl disable 服务名
  • NetworkManager-wait-online
    ,若不需要等待网络,可禁用它:
    sudo systemctl disable NetworkManager-wait-online.service

三、查看服务依赖与并行情况:
systemd-analyze critical-chain

这个命令展示从系统启动到默认目标(target)完成的关键路径:

systemd-analyze critical-chain

输出示例:

graphical.target @10.234s
└─multi-user.target @10.233s
  └─app-server.service @8.690s +1.543s
    └─network-online.target @8.689s
      └─NetworkManager-wait-online.service @7.889s +800ms
        └─NetworkManager.service @2.123s +5.765s
          └─network-pre.target @2.122s
            └─firewalld.service @1.800s +322ms
              └─basic.target @1.799s
                └─sockets.target @1.798s
                  └─docker.socket @1.797s
                    └─sysinit.target @1.796s
                      └─systemd-timesyncd.service @1.700s +95ms
                        └─local-fs.target @1.699s
                          └─tmp.mount @1.690s +9ms
                            └─local-fs-pre.target @1.689s
                              └─...

关键点:

  • 每行显示服务名称、启动时间(@)和持续时间(+)
  • 关键路径上的服务是“串行瓶颈”,优化这些服务能显著缩短总启动时间
  • 如果某个服务耗时长且位于关键链上,优先优化它

四、可视化启动过程(可选):生成 SVG 图

systemd-analyze
还支持生成启动过程的可视化图表:

systemd-analyze plot > boot-time.svg

然后用浏览器打开

boot-time.svg
,可以看到所有服务的启动时间线,直观展示并行与串行关系。

适用场景:

  • 多服务启动顺序复杂,需要整体把握
  • 向团队汇报启动性能问题
  • 调试服务依赖冲突

小结:诊断流程建议

  1. 先运行
    systemd-analyze
    看总时间,判断是内核还是用户空间问题
  2. blame
    找出耗时最长的服务
  3. critical-chain
    查看关键路径,识别串行瓶颈
  4. 针对性优化:禁用、延迟、并行化或调整服务配置
  5. 必要时用
    plot
    生成图形辅助分析

基本上就这些。不复杂,但能快速定位大多数启动慢的问题。


# mysql  # linux  # redis  # docker  # nginx  # 浏览器  # 工具  # ai  # 优化配置  # red  # asic  # 数据库  # 出在  # 系统启动  # 这是  # 拖后腿  # 可以看到  # 问题是  # 自定义  # 告诉我们  # 可以使用  # 可选 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  C++时间戳转换成日期时间的步骤和示例代码  英语简历制作免费网站推荐,如何将简历翻译成英文?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何在腾讯云免费申请建站?  手机软键盘弹出时影响布局的解决方法  EditPlus 正则表达式 实战(3)  LinuxCD持续部署教程_自动发布与回滚机制  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  网站制作企业,网站的banner和导航栏是指什么?  如何快速生成凡客建站的专业级图册?  如何快速上传建站程序避免常见错误?  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Android利用动画实现背景逐渐变暗  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  非常酷的网站设计制作软件,酷培ai教育官方网站?  phpredis提高消息队列的实时性方法(推荐)  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  JavaScript如何实现音频处理_Web Audio API如何工作?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  bootstrap日历插件datetimepicker使用方法  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】  javascript读取文本节点方法小结  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Android Socket接口实现即时通讯实例代码  详解jQuery中的事件  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  制作企业网站建设方案,怎样建设一个公司网站?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何快速生成高效建站系统源代码?  Linux网络带宽限制_tc配置实践解析【教程】  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Android 常见的图片加载框架详细介绍  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧