我将假设您使用的是CentOS 7+或Ubuntu 15.04+,它们都附带了systemd。Systemd有一些很好的工具来计算您的系统启动所用的时间,以及一些可视化来了解其中的原因。
对于最基本的输出,只需运行systemd-analyze,您将得到一个很好的摘要,如下所示
代码语言:javascript复制Startup finished in 853ms (kernel) + 3min 50.610s (initrd) + 10.345s (userspace) = 4min 1.809s这可以告诉您上一次引导在systemd启动后需要多长时间。这没有考虑到BIOS/硬件初始化或GRUB超时,但是对于实际的OS启动时间应该是准确的。
如果你想弄清楚为什么操作系统要花这么长时间,试试systemd-analyze blame,它会给你一个从运行时间最长到最短的服务图表。从我的系统里
代码语言:javascript复制3min 49.219s systemd-cryptsetup@luks\x2d62611c1c\x2d74ab\x2d4be9\x2d8990\x2d41c0fd863b5a.service
5.315s plymouth-quit-wait.service
3.084s systemd-udev-settle.service
2.275s plymouth-start.service
2.256s docker.service
1.819s powertop.service
778ms firewalld.service
676ms dev-mapper-fedora\x2droot.device
621ms abrtd.service
493ms lvm2-monitor.service看上去我的笔记本电脑开机所需的4分钟中有3分钟是因为我有一个加密的驱动器。
最后,您可以看到一系列被认为对引导系统“至关重要”的事件。从手册页临界的意思是“时间关键链的单位”。这是因为systemd并行化了很多服务。这将列出必须等待另一个单位的单位,以及需要多长时间才能开始。
代码语言:javascript复制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 @10.336s
└─multi-user.target @10.323s
└─docker.service @4.900s +2.256s
└─network.target @4.868s
└─wpa_supplicant.service @4.828s +14ms
└─dbus.service @3.753s
└─basic.target @3.749s
└─sockets.target @3.749s
└─docker.socket @3.741s +6ms
└─sysinit.target @3.737s
└─systemd-update-utmp.service @3.726s +10ms
└─auditd.service @3.713s +9ms
└─systemd-tmpfiles-setup.service @3.617s +82ms
└─fedora-import-state.service @3.568s +36ms
└─local-fs.target @3.560s
└─run-user-42.mount @5.753s
└─local-fs-pre.target @383ms
└─systemd-tmpfiles-setup-dev.service @301ms +80ms
└─kmod-static-nodes.service @268ms +10ms
└─system.slice
└─-.slice您还可以通过将引导树导出到图片中来发送电子邮件或用svg绘制它,这样也可以做一些很酷的事情。有关更多详细信息,请参阅手册页或这个相关的问题获取更多详细信息。