对于系统服务启动问题,systemd自带了一个很好的优化工具,名叫systemd-analyze。它支持很多个子命令,用于满足各种优化需求。最常用的要算blame子命令。使用这个子命令,可以按耗时多少列出所有后台服务,耗时最长的列在最上面。
比如,在幽兰代码本上运行这条命令后,可以看到一张包含111个服务的耗时排行榜。

geduer@ulan:~$ systemd-analyze blame
2.911s NetworkManager-wait-online.service
2.297s logrotate.service
2.047s NetworkManager.service
1.520s snapd.service

超过1秒钟的有上面4个,是值得优化的目标。小于20毫秒的有下面8个,它们是速度标兵。

  19ms systemd-user-sessions.service
  17ms sys-fs-fuse-connections.mount
  16ms ifupdown-pre.service
  14ms sys-kernel-config.mount
  14ms modprobe@dm_mod.service
  11ms plymouth-quit-wait.service
  11ms rtkit-daemon.service
   6ms snapd.socket

当不带任何子命令运行时,可以看到一个启动耗时简报,比如在幽兰上运行的结果如下:
geduer@ulan:~$ systemd-analyze
Startup finished in 3.783s (kernel) + 8.258s (userspace) = 12.042s
graphical.target reached after 7.980s in userspace.
上面结果的含义是Linux系统启动总共用时12秒,其中内核阶段占用3.8秒,用户空间的初始化耗时8.2秒。

附录1:双剑2镜像的耗时排行表(2024-12-10)

2.911s NetworkManager-wait-online.service
2.297s logrotate.service
2.047s NetworkManager.service
1.520s snapd.service
 906ms dev-nvme0n1p2.device
 756ms systemd-udev-trigger.service
 692ms udisks2.service
 623ms snapd.seeded.service
 617ms blueman-mechanism.service
 564ms dev-loop1.device
 557ms dev-loop5.device
 538ms apport.service
 529ms dev-loop6.device
 526ms dev-loop7.device
 523ms dev-loop2.device
 517ms dev-loop4.device
 515ms dev-loop9.device
 509ms power-profiles-daemon.service
 506ms upower.service
 506ms dev-loop8.device
 495ms dev-loop3.device
 486ms polkit.service
 484ms accounts-daemon.service
 484ms dev-loop0.device
 477ms e2scrub_reap.service
 452ms dev-loop11.device
 438ms dev-loop12.device
 432ms dev-loop10.device
 398ms user@1000.service
 394ms waydroid-container.service
 380ms user@123.service
 365ms systemd-rfkill.service
 356ms rc-local.service
 321ms systemd-logind.service
 314ms apport-autoreport.service
 296ms systemd-fsck@dev-disk-by\x2duuid-4800\x2d9122.service
 252ms systemd-resolved.service
 212ms systemd-journal-flush.service
 210ms systemd-oomd.service
 207ms avahi-daemon.service
 199ms systemd-journald.service
 195ms systemd-timesyncd.service
 190ms networking.service
 184ms ModemManager.service
 177ms rsyslog.service
 175ms snap-bare-5.mount
 171ms snap-core22-1666.mount
 167ms snap-core22-1720.mount
 164ms lm-sensors.service
 162ms snap-core24-493.mount
 157ms snap-core24-612.mount
 154ms snap-cups-1059.mount
 149ms snap-cups-1069.mount
 145ms dpkg-db-backup.service
 144ms snap-gnome\x2d46\x2d2404-41.mount
 142ms switcheroo-control.service
 141ms dbus.service
 140ms snap-gnome\x2d46\x2d2404-49.mount
 134ms snap-gtk\x2dcommon\x2dthemes-1535.mount
 133ms systemd-remount-fs.service
 133ms systemd-tmpfiles-setup.service
 126ms lxc-net.service
 125ms snap-mesa\x2d2404-142.mount
 121ms snap-snapd-21761.mount
 117ms snap-snapd-23259.mount
 115ms lightdm.service
 115ms tmp.mount
 111ms uefi_ext.mount
  95ms systemd-udevd.service
  92ms ssh.service
  89ms systemd-fsck@dev-disk-by\x2duuid-4801\x2d6134.service
  79ms kerneloops.service
  73ms cups.service
  70ms systemd-sysusers.service
  69ms dev-disk-by\x2duuid-5256e7ae\x2d1d0b\x2d4006\x2d8cc0\x2d2cea0900bd03.swap
  67ms wpa_supplicant.service
  62ms dev-hugepages.mount
  59ms dev-mqueue.mount
  57ms modprobe@loop.service
  56ms sys-kernel-debug.mount
  55ms netperf.service
  55ms boot.mount
  55ms modprobe@efi_pstore.service
  54ms openvpn.service
  53ms sys-kernel-tracing.mount
  51ms pangolin.service
  50ms systemd-tmpfiles-setup-dev.service
  45ms systemd-backlight@backlight:backlight.service
  44ms kmod-static-nodes.service
  44ms user-runtime-dir@123.service
  44ms alsa-restore.service
  42ms modprobe@configfs.service
  41ms plymouth-read-write.service
  38ms modprobe@drm.service
  38ms systemd-random-seed.service
  38ms systemd-sysctl.service
  34ms systemd-update-utmp.service
  33ms modprobe@fuse.service
  31ms plymouth-start.service
  31ms systemd-update-utmp-runlevel.service
  27ms systemd-modules-load.service
  26ms lxc.service
  24ms user-runtime-dir@1000.service
  19ms systemd-user-sessions.service
  17ms sys-fs-fuse-connections.mount
  16ms ifupdown-pre.service
  14ms sys-kernel-config.mount
  14ms modprobe@dm_mod.service
  11ms plymouth-quit-wait.service
  11ms rtkit-daemon.service
   6ms snapd.socket

附录2:测试中的汉阳镜像的耗时排行表(2025-6-26)

geduer@ulan:~$ systemd-analyze blame
30.166s lxc.service
 7.032s plymouth-quit-wait.service
 1.348s NetworkManager.service
 1.001s apport.service
  953ms snapd.seeded.service
  826ms snapd.service
  814ms waydroid-container.service
  730ms dev-mmcblk0.device
  727ms e2scrub_reap.service
  574ms udisks2.service
  563ms accounts-daemon.service
  561ms gnome-remote-desktop.service
  394ms ModemManager.service
  391ms power-profiles-daemon.service
  386ms polkit.service
  372ms avahi-daemon.service
  336ms dbus.service
  289ms switcheroo-control.service
  268ms systemd-udev-trigger.service
  259ms lighttpd.service
  221ms upower.service
  210ms user@1000.service
  197ms blueman-mechanism.service
  197ms systemd-resolved.service
  185ms systemd-rfkill.service
  170ms wpa_supplicant.service
  160ms systemd-journald.service
  153ms systemd-logind.service
  153ms gdm.service
  133ms systemd-udevd.service
  125ms lxcfs.service
  109ms cups.service
  107ms qrtr-ns.service
   93ms lxc-net.service
   93ms colord.service
   93ms pd-mapper.service
   90ms packagekit.service
   82ms set-mali-firmware.service
   81ms netperf.service
   70ms systemd-timesyncd.service
   58ms plymouth-start.service
   56ms systemd-tmpfiles-setup-dev-early.service
   55ms systemd-binfmt.service
   53ms kerneloops.service
   53ms systemd-tmpfiles-setup.service
   49ms alsa-restore.service
   47ms systemd-sysctl.service
   40ms systemd-backlight@backlight:backlight.service
   39ms systemd-tmpfiles-setup-dev.service
   35ms dev-hugepages.mount
   34ms dev-mqueue.mount
   32ms sys-kernel-debug.mount
   31ms plymouth-read-write.service
   30ms sys-kernel-tracing.mount
   28ms systemd-modules-load.service
   27ms systemd-journal-flush.service
   25ms modprobe@fuse.service
   24ms user-runtime-dir@1000.service
   24ms modprobe@loop.service
   23ms kmod-static-nodes.service
   22ms systemd-random-seed.service
   22ms modprobe@configfs.service
   21ms modprobe@dm_mod.service
   18ms sys-kernel-config.mount
   17ms tmp.mount
   17ms run-qemu.mount
   16ms modprobe@drm.service
   16ms rtkit-daemon.service
   16ms modprobe@efi_pstore.service
   15ms systemd-update-utmp.service
   14ms systemd-user-sessions.service
   13ms pangolin.service
   13ms proc-sys-fs-binfmt_misc.mount
   12ms systemd-remount-fs.service
   10ms openvpn.service
    4ms snapd.socket

上面列表中,用于容器的lxc服务用时超过30秒,原因是它以来的fuse驱动构建为ko,而且没有安装deb包,导致这个ko没有加载,安装deb包后这个问题便消失了

geduer@ulan:~$ systemd-analyze blame
2min 40ms snapd.seeded.service
   6.556s apport-autoreport.service
   1.660s docker.service
    904ms lvm2-monitor.service
    834ms udisks2.service
    810ms dev-mmcblk0p3.device
    800ms containerd.service
    645ms accounts-daemon.service
    433ms NetworkManager.service
    376ms async.service
    358ms avahi-daemon.service
    346ms systemd-logind.service
    339ms e2scrub_reap.service
    336ms wpa_supplicant.service
    326ms switcheroo-control.service
    321ms systemd-machined.service
    310ms systemd-resolved.service
    291ms snapd.service
    225ms lightdm.service
    218ms systemd-journal-flush.service
    206ms systemd-rfkill.service
    196ms systemd-udevd.service
    190ms plymouth-quit-wait.service
    186ms upower.service
    168ms ssh.service
    157ms systemd-udev-trigger.service
    149ms user@128.service
    124ms user@1000.service
    115ms apport.service
    112ms systemd-journald.service
    110ms rsyslog.service
     94ms ntp.service
     89ms networking.service
     82ms kerneloops.service
     81ms snapd.failure.service
     66ms dev-hugepages.mount
     58ms run-rpc_pipefs.mount
     56ms polkit.service
     53ms sys-kernel-debug.mount
     52ms libvirtd.service
     51ms libvirt-guests.service
     48ms sys-kernel-tracing.mount
     47ms atd.service
     42ms systemd-sysctl.service
     40ms blk-availability.service
     39ms alsa-restore.service
     38ms systemd-tmpfiles-setup.service
     37ms systemd-tmpfiles-setup-dev.service
     34ms colord.service
     32ms binfmt-support.service
     32ms kmod-static-nodes.service
     31ms systemd-sysusers.service
     30ms systemd-random-seed.service
     30ms systemd-pstore.service
     26ms modprobe@chromeos_pstore.service
     26ms pppd-dns.service
     26ms rpcbind.service
     26ms plymouth-start.service
     25ms rkaiq_3A.service
     24ms modprobe@pstore_blk.service
     24ms openvpn.service
     23ms rc-local.service
     23ms modprobe@pstore_zone.service
     21ms systemd-modules-load.service
     21ms systemd-update-utmp.service
     19ms systemd-backlight@backlight:backlight.service
     18ms systemd-user-sessions.service
     18ms systemd-update-utmp-runlevel.service
     18ms systemd-remount-fs.service
     16ms user-runtime-dir@128.service
     16ms proc-sys-fs-binfmt_misc.mount
     15ms plymouth-read-write.service
     12ms vsftpd.service
     11ms user-runtime-dir@1000.service
     11ms nfs-config.service
     10ms sys-kernel-config.mount
      8ms rtkit-daemon.service
      8ms qemu-kvm.service
      7ms sys-fs-fuse-connections.mount
      7ms ifupdown-pre.service
      4ms docker.socket
      3ms libvirtd.socket
      2ms snapd.socket
作者:Zhang Yinkui  创建时间:2024-12-10 10:08
最后编辑:Zhang Yinkui  更新时间:2025-06-26 10:59