你是否正在使用systemd系统和服务管理器,并且Linux系统需要很长的启动时间?或者你只是想查看有关系统启动性能的报告?那么systemd-analyze可以来帮助我们来统计和分析这些性能。systemd-analyzesystemd下用于系统管理的众多实用程序之一,本文中,我们将向你展示如何使用systemd-analyze来分析Linux系统启动性能统计信息。

要大致了解系统启动时间,我们可以运行systemd-analyze命令,不带任何参数,如下所示。它将列出有关每个服务启动所需时间的信息,包括启动时内核和用户空间所花费的时间。

$ systemd-analyze 
Startup finished in 4.454s (kernel) + 5.155s (userspace) = 9.609s
graphical.target reached after 5.144s in userspace

如果要查看所有正在运行的单元的列表,并且按照它们初始化所需的时间(最长时间)排序,我们可以使用blame子命令。运行以下命令后,使用Enter查看列表中的更多服务并q退出。

$ systemd-analyze blame

找出每个单元开始的时间

          5.923s dev-sda1.device
          5.543s dev-loop14.device
          5.478s dev-loop15.device
          5.121s dev-loop13.device
          2.442s snapd.service
          1.163s snapd.seeded.service
          1.036s udisks2.service
           964ms networkd-dispatcher.service
           930ms fwupd.service
           883ms apparmor.service
           758ms ModemManager.service
           677ms accounts-daemon.service
           581ms systemd-udev-trigger.service
           538ms systemd-journald.service
           530ms NetworkManager-wait-online.service
           528ms grub-common.service
           514ms speech-dispatcher.service
           499ms dev-loop4.device
           493ms networking.service
           481ms dev-loop7.device
           474ms avahi-daemon.service
           444ms dev-loop2.device
           433ms dev-loop0.device
           418ms NetworkManager.service
           415ms dev-loop1.device
           415ms systemd-modules-load.service
           414ms dev-loop5.device
           396ms dev-loop6.device
           393ms dev-loop3.device
           363ms dev-loop8.device
           344ms systemd-random-seed.service

从上面的输出中可以看到,每个单元都是基于花费的时间进行排序的,你可以简单地找出启动时哪个服务花费更长的时间并分析问题。

接下来,我们还可以使用critical-chain子命令查看默认目标的时间关键链的树或指定单元的列表,如图所示。

systemd-analyze critical-chain

打印默认目标的时间关键链的树

$ systemd-analyze critical-chain        
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @5.144s
└─multi-user.target @5.144s
  └─snapd.seeded.service @3.980s +1.163s
    └─snapd.service @1.536s +2.442s
      └─basic.target @1.464s
        └─sockets.target @1.464s
          └─snapd.socket @1.457s +6ms
            └─sysinit.target @1.454s
              └─apparmor.service @569ms +883ms
                └─local-fs.target @511ms
                  └─run-user-121.mount @2.988s
                    └─swap.target @845ms
                      └─swapfile.swap @364ms +319ms
                        └─systemd-remount-fs.service @325ms +30ms
                          └─systemd-journald.socket @283ms
                            └─system.slice @283ms
                              └─-.slice @279ms

最后,让我们看一个更重要的子命令,该子命令可以产生已启动的系统服务的图形化(svg格式)详细信息,并在何时突出显示其初始化时间,如下所示。

确保已启用图形显示模式或x窗口以查看图。

$ systemd-analyze plot > boot.svg
$ google-chrome boot.svg 

在这里插入图片描述
以上所有命令将打印本地计算机的启动性能统计信息。要通过ssh从远程主机查看相关信息,可以使用-H标志并指定username@host指令,如下所示。

$ systemd-analyze time -H iot@192.168.1.10
$ systemd-analyze blame -H iot@192.168.1.10
$ systemd-analyze critical-chain -H iot@192.168.1.10

systemd-analyze还可以用于从systemsystemd等中查找其他状态和跟踪信息,有关更多信息,请参见其手册页。

$ man systemd-analyze 
Logo

更多推荐