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

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),可以改变这些依赖关系。

相关文章:

  • shell命令学习(1)——(待完善)
  • matplot函数调整子图大小测试
  • 提升Python项目整洁度:深入使用 import-linter
  • 【Jmeter】JSON Extractor变量包含转义字符,使用Beanshell脚本来消除
  • 06、基于内容的过滤算法Tensorflow实现
  • yolov3 train.py解读
  • 多表操作、其他字段和字段参数、django与ajax(回顾)
  • unknown error 1060
  • 人工智能_机器学习061_KKT条件公式理解_原理深度解析_松弛变量_不等式约束---人工智能工作笔记0101
  • 使用群晖Docker搭建HomeAssistant并实现异地公网访问家中智能设备
  • 【云原生-K8s】镜像漏洞安全扫描工具Trivy部署及使用
  • 14、pytest像用参数一样使用fixture
  • AIGC: 关于ChatGPT中的API调用模型
  • 基于YOLOv8深度学习的安全帽目标检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • Python查看文件列表
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【5+】跨webview多页面 触发事件(二)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • JAVA并发编程--1.基础概念
  • js操作时间(持续更新)
  • Median of Two Sorted Arrays
  • React组件设计模式(一)
  • SSH 免密登录
  • TypeScript迭代器
  • Unix命令
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 笨办法学C 练习34:动态数组
  • 计算机在识别图像时“看到”了什么?
  • 前端存储 - localStorage
  • 设计模式走一遍---观察者模式
  • 数据可视化之 Sankey 桑基图的实现
  • 双管齐下,VMware的容器新战略
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • AI算硅基生命吗,为什么?
  • 仓管云——企业云erp功能有哪些?
  • ‌JavaScript 数据类型转换
  • (003)SlickEdit Unity的补全
  • (10)ATF MMU转换表
  • (6)STL算法之转换
  • (pojstep1.3.1)1017(构造法模拟)
  • (超详细)语音信号处理之特征提取
  • (二) 初入MySQL 【数据库管理】
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (理论篇)httpmoudle和httphandler一览
  • (六)激光线扫描-三维重建
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一) 初入MySQL 【认识和部署】
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 未来三学期想要修的课 (日記)
  • (转)重识new
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • ... 是什么 ?... 有什么用处?
  • .a文件和.so文件
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...