systemd-analyze – 检视 Linux 启动时间统计


如何 Linux 是使用 systemd 作为服务管理, 可以用内建的 systemd-analyze 指令, 检查每一个启动的服务需要多少时间开启。

直接输入 systemd-analyze 指令, 不加入任何参数, 会印出系统启动时间的概览, 例如:

# systemd-analyze
Startup finished in 1.685s (kernel) + 2.306s (initrd) + 43.588s (userspace) = 47.580s

上面列出了 kernel, initrd 及 userspace 的启动时间, 最后将几个时间相加的整体启动时间。

要检查每一个服务的启动时间, 并按所需启动时间由高至低排序, 可以加入 blame 参数, 这样可以找出那一个服务造成开机缓慢, 例如:

# systemd-analyze blame

输出例子如下:

25.634s kdump.service
21.346s sendmail.service
7.898s network.service
5.775s NetworkManager-wait-online.service
3.389s mariadb.service
1.605s named.service
1.357s dev-mapper-centos\x2droot.device
1.130s snmpd.service
1.064s tuned.service
676ms httpd.service
674ms lvm2-monitor.service
563ms systemd-tmpfiles-setup-dev.service
518ms NetworkManager.service
492ms lvm2-pvscan@8:2.service
334ms rhel-readonly.service
330ms home.mount
305ms var.mount
300ms fail2ban.service
257ms sshd.service
206ms systemd-sysctl.service
188ms tmp.mount
186ms systemd-logind.service
184ms named-setup-rndc.service
181ms sm-client.service
171ms backup.mount
170ms rsyslog.service
157ms systemd-tmpfiles-clean.service
147ms systemd-udevd.service
133ms boot.mount
129ms systemd-journald.service
125ms polkit.service
……

另一个用法是以树状形式检查启动的服务:

# systemd-analyze critical-chain
multi-user.target @39.664s
└─sm-client.service @39.290s +181ms
└─sendmail.service @17.943s +21.346s
└─network.target @17.922s
└─network.service @10.023s +7.898s
└─NetworkManager-wait-online.service @4.246s +5.775s
└─NetworkManager.service @3.727s +518ms
└─dbus.service @3.549s
└─basic.target @3.544s
└─paths.target @3.544s
└─brandbot.path @3.544s
└─sysinit.target @3.543s
└─systemd-update-utmp.service @3.516s +26ms
└─auditd.service @3.423s +91ms
└─systemd-tmpfiles-setup.service @3.331s +90ms
└─rhel-import-state.service @3.284s +45ms
└─local-fs.target @3.242s
└─home.mount @2.911s +330ms
└─dev-mapper-centos\x2dhome.device @2.909s

Leave a Reply