您是否在使用 systemd 系統和服務管理器,並且您的 Linux 系統需要較長時間才能啟動,或者您希望查看系統啟動性能的報告? 如果是的話,你已經登陸了正確的地方。
在本文中,我們將向您展示如何使用systemd-analyze來分析 Linux 系統啟動性能統計信息, systemd是 systemd 中用於系統管理的眾多實用程序之一。
另請參閱 : 如何在遠程 Linux 服務器上控制系統服務
要獲得系統啟動時間的概述,我們可以運行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 protected]
- 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
- ...
從上面的輸出中可以看出,每台設備都是基於所花費的時間進行排序的,您可以簡單地找出哪些服務在啟動和分析問題時花費的時間較長。
接下來,我們還可以使用 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.
- 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

Linux 啟動分析
以上所有命令都將打印本地機器的啟動性能統計信息。 要通過ssh從遠程主機查看信息,請使用-H
標志並指定[email protected]指令,如圖所示。
- # systemd-analyze time -H [email protected]
- # systemd-analyze blame -H [email protected]
- # systemd-analyze critical-chain -H [email protected]
systemd-analysis也可用於從系統和 systemd(服務管理器)等中查找其他狀態和跟蹤信息。 有關更多信息,請參閱其手冊頁。
- # man systemd-analyze
另請參閱 : 如何在 SystemD 中更改運行級別(目標)