网站搜索

systemd-analyze - 在 Linux 中查找系统启动性能统计信息


您是否正在使用 systemd 系统和服务管理器,并且您的 Linux 系统启动时间较长,或者您只是想查看系统启动性能的报告?如果是,那么您来对地方了。

在本文中,我们将向您展示如何使用 systemd-analyze 来分析 Linux 系统启动性能统计数据,systemd-analyze 是 systemd 下用于系统管理的众多实用程序之一。

另请阅读:如何控制远程 Linux 服务器上的 Systemd 服务

为了获得系统启动时间的概览,我们可以运行不带任何参数的 systemd-analyze 命令,如下所示。它将列出每个服务启动所花费的时间的信息,其中包括启动时内核、initrd 和用户空间所花费的时间。

systemd-analyze

Startup finished in 884ms (kernel) + 3.861s (initrd) + 48.356s (userspace) = 53.102s

如果您想查看所有正在运行的单元的列表,并按初始化时间排序(最长的时间在顶部),则可使用blame子命令来实现此目的。运行以下命令后,使用 [Enter] 查看列表中的更多服务,然后使用 q 退出。

systemd-analyze blame 
         16.159s mariadb.service
         12.178s libvirtd.service
         10.298s tuned.service
          9.836s postfix.service
          8.704s lsws.service
          7.352s lscpd.service
          4.988s [email 
          4.779s NetworkManager-wait-online.service
          4.577s lvm2-monitor.service
          4.439s ModemManager.service
          4.413s polkit.service
          4.280s dev-sda1.device
          4.225s systemd-udev-settle.service
          3.957s firewalld.service
          3.227s rhel-dmesg.service
          3.221s abrt-ccpp.service
          3.142s rsyslog.service
          3.053s avahi-daemon.service
          3.042s pure-ftpd.service
          2.249s gssproxy.service
          2.212s NetworkManager.service
          1.889s proc-fs-nfsd.mount
          1.780s systemd-tmpfiles-setup-dev.service
          1.451s sshd.service
          1.267s rhel-readonly.service
          1.035s sysstat.service
          1.001s rpc-statd-notify.service
           910ms systemd-logind.service
           739ms kdump.service
           738ms network.service
...

从上面的输出可以看出,每个单元都是根据所花费的时间进行排序的,您可以简单地找出哪个服务在启动时花费了更长的时间并分析问题。

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

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.

multi-user.target @48.342s
└─mariadb.service @31.560s +16.159s
  └─network.target @31.558s
    └─network.service @30.819s +738ms
      └─NetworkManager-wait-online.service @26.035s +4.779s
        └─NetworkManager.service @23.821s +2.212s
          └─network-pre.target @23.821s
            └─firewalld.service @19.863s +3.957s
              └─polkit.service @15.381s +4.413s
                └─basic.target @12.271s
                  └─sockets.target @12.271s
                    └─virtlockd.socket @12.270s
                      └─sysinit.target @12.251s
                        └─systemd-update-utmp.service @12.196s +54ms
                          └─auditd.service @11.705s +486ms
                            └─systemd-tmpfiles-setup.service @11.609s +93ms
                              └─rhel-import-state.service @11.397s +211ms
                                └─local-fs.target @11.363s
                                  └─run-user-0.mount @46.910s
                                    └─local-fs-pre.target @10.575s
                                      └─lvm2-monitor.service @5.996s +4.577s
                                        └─lvm2-lvmetad.service @7.376s
                                          └─lvm2-lvmetad.socket @5.987s
                                            └─-.slice
systemd-analyze critical-chain ntp.service networking.service

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

确保启用图形显示模式或 x-windows 才能查看绘图。

systemd-analyze plot > boot_analysis.svg
xviewer boot_analysis.svg  

上述所有命令都会打印本地机器的启动性能统计信息。要通过 ssh 查看来自远程主机的信息,请使用 -H 标志并指定 username@host 指令,如图所示。

systemd-analyze time -H [email 
systemd-analyze blame -H [email 
systemd-analyze critical-chain -H [email 

systemd-analyze 还可用于从系统和 systemd(服务管理器)等查找其他状态和跟踪信息。有关更多信息,请参阅其手册页。

man systemd-analyze 

另请阅读:如何更改 SystemD 中的运行级别(目标)

现在就是这样!如果您有任何问题或想法要分享,请使用下面的反馈表联系我们。