如何对缓慢的用户空间启动时间进行分类?

如何对缓慢的用户空间启动时间进行分类?

我的体验非常慢用户空间加载时间相比核心加载时间,如下所示systemd-analyze

jnavarro@almanzora:~$ systemd-analyze 
Startup finished in 14.134s (kernel) + 1min 30.675s (userspace) = 1min 44.809s 
graphical.target reached after 12.124s in userspace

当我也问时,systemd-analyze blame我没有看到任何“好的候选人”:

jnavarro@almanzora:~$ systemd-analyze blame
          7.387s NetworkManager-wait-online.service
          6.863s plymouth-quit-wait.service
          1.996s docker.service
          1.966s exim4.service
          1.895s systemd-cryptsetup@luks\foo\bar\zaz\.service
          1.256s fwupd.service
          1.061s upower.service
          1.008s alsa-restore.service
           978ms dev-mapper-almanzora\foo\bar\zaz.device
           756ms udisks2.service

知道在哪里可以找到导致启动时间变慢的原因吗?看来systemd不能再帮助我了。

- 编辑 -

systemd-analyze critical-chain输出:

jnavarro@almanzora:~$ 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 @12.124s
└─multi-user.target @12.124s
  └─docker.service @10.127s +1.996s
    └─network-online.target @10.125s
      └─NetworkManager-wait-online.service @2.737s +7.387s
        └─NetworkManager.service @2.416s +319ms
          └─dbus.service @2.413s
            └─basic.target @2.392s
              └─sockets.target @2.392s
                └─docker.socket @2.390s +1ms
                  └─sysinit.target @2.387s
                    └─sys-fs-fuse-connections.mount @22.662s +9ms
                      └─systemd-modules-load.service @548ms +95ms
                        └─systemd-journald.socket @531ms
                          └─-.mount @526ms
                            └─systemd-journald.socket @531ms
                              └─...

答案1

如果systemd-analyze blame无法识别延迟的应用程序/服务,这可能意味着 systemd 之外的其他原因导致了延迟。

  • 这可能是由设备引起的...尝试删除所有可拔出的设备(USB 等)并重新启动,固件/驱动程序可能会导致延迟

  • 您可以在启动后以 tty2 身份登录(ctrl+alt+f2)以避免加载桌面及其应用程序,然后从那里使用 ps 查看正在运行的内容以及执行时间。

ps -eo pid,lstart,cmd将列出已启动的任务及其启动时间/日期,ps -aux您可以检查每个进程使用的 cpu 时间。

  • 此外,有缺陷的硬件(如硬盘驱动器)也可能会导致延迟,您可以使用 live cd 进行检查,或者启动不同的内核版本或不同的发行版,然后检查它是否也受到影响

相关内容