当前位置: 首页 > article >正文

Ubuntu systemd-analyze命令(系统启动性能分析工具:分析系统启动时间,找出可能导致启动缓慢的原因)

文章目录

  • Ubuntu systemd-analyze命令剖析
    • 目录
    • 简介
      • systemd与systemd-analyze
      • 工作原理
    • 安装和使用
    • 命令参数详解
    • 用例与示例
      • 显示启动时间(systemd-analyze time)
        • 返回信息解读
      • 列出启动过程中各个服务的启动时间(systemd-analyze blame)
      • 显示系统启动过程的关键链(systemd-analyze critical-chain)
      • 生成启动过程的SVG图像(systemd-analyze plot > boot.svg)
    • 性能优化

Ubuntu systemd-analyze命令剖析

systemd-analyze是一个用于系统启动性能分析的强大工具,本文将全面解析该命令在Ubuntu系统中的应用。

目录

简介

systemd与systemd-analyze

systemd 是Linux系统中一种广泛使用的初始化系统,它负责引导用户空间并管理系统进程。它主要由两部分组成:一个系统/服务管理器,以及众多工具和库。

其中,systemd-analyzesystemd 的一个工具,可以提供有关系统启动过程的信息。它可以帮助用户分析系统启动时间,并找出可能导致启动缓慢的原因。

工作原理

systemd-analyze 主要通过读取系统日志(journal)和分析systemd的内部数据结构来获取系统启动信息。此外,它还可以生成启动过程的图形表示,这对于可视化分析系统启动流程非常有用。


安装和使用

在大多数Ubuntu版本中,systemd-analyze已经被默认安装。如果未安装,可以通过以下命令进行安装:

sudo apt-get install systemd

使用 systemd-analyze,只需在命令行中输入:

systemd-analyze

命令参数详解

systemd-analyze 提供了许多命令行选项和参数,可以用于定制分析的内容和格式。以下是一些最常用的选项:

  • time:显示启动过程中花费的总时间。
  • blame:显示每个服务的启动时间,以帮助找出导致启动缓慢的服务。
  • critical-chain:显示系统启动过程中的关键路径,这有助于找出哪些服务在启动过程中相互依赖。
  • plot:生成一个SVG图像,表示系统启动过程的时间线。

用例与示例

以下是 systemd-analyze 的一些常见用例和示例:

显示启动时间(systemd-analyze time)

systemd-analyze time

在这里插入图片描述

返回信息解读

以这个返回信息为例:

root@ubuntu:~# systemd-analyze time
Startup finished in 7.356s (kernel) + 3min 9.863s (userspace) = 3min 17.219s
graphical.target reached after 3min 9.754s in userspace

这个输出的意思是,你的系统总共用了3分17.219秒来启动。这个时间被分为两部分:内核花费了7.356秒的时间来启动,而用户空间(userspace)花费了3分9.863秒的时间来启动。"graphical.target reached after 3min 9.754s in userspace"表示图形用户界面在用户空间开始启动后3分9.754秒才完全启动。

不是3分17.219秒+3分9.754秒。这两个时间中,一个是总体启动时间,另一个是用户空间启动时间,其中用户空间启动时间包含在总体启动时间内。

时序图大概如下:

Total startup time (3m 17.219s)
|-------------------------------------------------------|
Kernel startup (7.356s)
|----|
Userspace startup (3m 9.863s)
     |--------------------------------------------------|
Graphical target reached (3m 9.754s in userspace)
     |-------------------------------------------------|

注意这里所有的时间都是从同一起点开始的,并非相互累积。

列出启动过程中各个服务的启动时间(systemd-analyze blame)

systemd-analyze blame

在这里插入图片描述

上面有的启动耗时较长的服务可以选择关掉,以下是对以上服务的分析:

  1. systemd-networkd-wait-online.service: 这个服务等待网络连接可用。如果你的系统不依赖于启动时立即有网络连接,那么你可以尝试关闭它。

  2. apt-daily-upgrade.serviceapt-daily.service: 这两个服务用于处理和应用系统更新。通常情况下,我们不推荐关闭它们,因为这可能会导致你错过重要的安全更新。但是,如果你正在寻找缩短启动时间,可以考虑禁用它们,并定期手动进行系统更新。

  3. dev-nvme0n1p1.device: 这个服务是关于硬盘驱动器的,建议不要关闭。

  4. nv-l4t-usb-device-mode.servicenv.service: 这两个服务似乎与NVIDIA硬件相关。如果你正在使用相关硬件,最好不要关闭它们。

  5. docker.servicecontainerd.service: 如果你不使用Docker,你可以关闭这些服务。

  6. alsa-restore.service: 这个服务用于恢复声音卡设置。如果你不需要声音功能,可以考虑关闭它。

  7. nvpmodel.service: 这个服务用于管理NVIDIA Jetson平台的功率模式。如果你正在使用Jetson硬件,最好不要关闭它。

  8. snapd.seeded.servicesnapd.service: 这些服务用于管理Snap应用。如果你不使用Snap应用,你可以关闭这些服务。

  9. nv-l4t-bootloader-config.service: 这个服务似乎与NVIDIA的bootloader相关,建议不要关闭。

  10. systemd-udev-trigger.service: 这个服务用于触发udev事件,通常情况下,最好不要关闭。

  11. xrdp.service: 这个服务是远程桌面协议服务,如果你不需要远程访问,可以关闭它。

  12. networkd-dispatcher.service: 这个服务用于处理网络状态变化的事件。如果你的系统不依赖于动态网络配置,那么你可以尝试关闭它。

  13. user@124.service: 这可能是特定用户的服务,没有足够的信息来判断是否可以关闭。

显示系统启动过程的关键链(systemd-analyze critical-chain)

systemd-analyze critical-chain

在这里插入图片描述

上游的目标受下游目标启动影响。

生成启动过程的SVG图像(systemd-analyze plot > boot.svg)

systemd-analyze plot > boot.svg

在这里插入图片描述

在这里插入图片描述


性能优化

通过 systemd-analyze 分析后,可能会发现一些服务导致系统启动变慢。针对这种情况,可以尝试以下优化方法:

  • 禁用不必要的服务:有些服务可能并不总是需要在启动时运行。可以通过 systemctl disable <service> 命令来禁用这些服务。
  • 修改服务依赖关系:有时,服务之间的依赖关系会导致启动延迟。通过修改服务的配置文件(位于 /etc/systemd/system/lib/systemd/system),可以改变这些依赖关系。


http://www.kler.cn/news/161183.html

相关文章:

  • [vue3] 使用 vite 创建vue3项目的详细流程
  • 【pytorch】深度学习入门一:pytorch的安装与配置(Windows版)
  • 适合炎热天气的最佳葡萄酒有哪些?
  • 北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合
  • 修改el-table表头样式
  • 电脑搜不自己的手机热点,其余热点均可!
  • doris查询报错err: Error 1105: errCode = 2, detailMessage = query timeout
  • 通信线缆是什么
  • 论ChatGPT让程序员提升效率—掌握时代工具风口修炼之道【文末送书-02】
  • java常用字符串工具方法封装
  • 我们一起聊一聊JWT的那些事
  • 电商平台API接口文档演示案例,拼多多、淘宝、天猫、1688、京东、阿里巴巴、速卖通、LAZADA、虾皮APP商品详情API文档大全
  • CMakeLists获取文件夹——file指令
  • 形态学操作—细化
  • Python 日志(略讲)
  • Java程序员,你掌握了多线程吗?(文末送书)
  • 圣诞将至—C语言圣诞树代码来啦
  • VIR-SLAM代码分析3——VIR_VINS详解之estimator.cpp/.h
  • Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务
  • 使用VS Code远程开发MENJA小游戏并通过内网穿透分享本地游戏到公网
  • NR重写console.log 增加时间信息
  • 在Linux上安装KVM虚拟机
  • 冒泡排序详解
  • Android 记录一些Framework开发的命令
  • Think in Java之多态
  • 2024年网络安全比赛--系统渗透测试(超详细)
  • vue.js el-table 动态单元格列合并
  • 数据库压力测试方法小结
  • TiDB专题---2、TiDB整体架构和应用场景
  • YashanDB练习SQL