文章目录
- 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-analyze
是 systemd
的一个工具,可以提供有关系统启动过程的信息。它可以帮助用户分析系统启动时间,并找出可能导致启动缓慢的原因。
工作原理
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
上面有的启动耗时较长的服务可以选择关掉,以下是对以上服务的分析:
-
systemd-networkd-wait-online.service
: 这个服务等待网络连接可用。如果你的系统不依赖于启动时立即有网络连接,那么你可以尝试关闭它。 -
apt-daily-upgrade.service
和apt-daily.service
: 这两个服务用于处理和应用系统更新。通常情况下,我们不推荐关闭它们,因为这可能会导致你错过重要的安全更新。但是,如果你正在寻找缩短启动时间,可以考虑禁用它们,并定期手动进行系统更新。 -
dev-nvme0n1p1.device
: 这个服务是关于硬盘驱动器的,建议不要关闭。 -
nv-l4t-usb-device-mode.service
和nv.service
: 这两个服务似乎与NVIDIA硬件相关。如果你正在使用相关硬件,最好不要关闭它们。 -
docker.service
和containerd.service
: 如果你不使用Docker,你可以关闭这些服务。 -
alsa-restore.service
: 这个服务用于恢复声音卡设置。如果你不需要声音功能,可以考虑关闭它。 -
nvpmodel.service
: 这个服务用于管理NVIDIA Jetson平台的功率模式。如果你正在使用Jetson硬件,最好不要关闭它。 -
snapd.seeded.service
和snapd.service
: 这些服务用于管理Snap应用。如果你不使用Snap应用,你可以关闭这些服务。 -
nv-l4t-bootloader-config.service
: 这个服务似乎与NVIDIA的bootloader相关,建议不要关闭。 -
systemd-udev-trigger.service
: 这个服务用于触发udev事件,通常情况下,最好不要关闭。 -
xrdp.service
: 这个服务是远程桌面协议服务,如果你不需要远程访问,可以关闭它。 -
networkd-dispatcher.service
: 这个服务用于处理网络状态变化的事件。如果你的系统不依赖于动态网络配置,那么你可以尝试关闭它。 -
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
),可以改变这些依赖关系。