systemd-analysis – утилита мониторинга статистики загрузки системы Linux

Чтобы получить обзор времени загрузки системы, мы можем запустить команду systemd-analysis без каких-либо аргументов. Она выведет информацию о том, сколько времени занимает запуск каждой служба при запуске системы, включая время, затраченное ядром, initrd и userpace во время загрузки.

# systemd-analyze

Startup finished in 1min 1.117s (kernel) + 41.426s (userspace) = 1min 42.543s
graphical.target reached after 41.278s in userspace

Если вы хотите просмотреть список всех запущенных блоков, отсортированных по времени, затраченному на инициализацию (максимальное время сверху), для этой цели используется подпрограмма blame.

# systemd-analyze blame

18.765s nmbd.service
 9.167s man-db.service
 6.951s dev-sdb1.device
 6.433s systemd-journal-flush.service
 5.966s smbd.service
 4.023s systemd-journald.service
 3.878s keyboard-setup.service
 3.275s apt-daily.service
 3.274s apt-daily-upgrade.service
 3.196s systemd-udev-trigger.service
 2.583s e2scrub_reap.service
 1.989s loadcpufreq.service
 1.819s run-rpc_pipefs.mount
 1.351s modprobe@drm.service
 1.205s ssh.service
 1.135s apparmor.service
 1.118s networking.service
 1.034s systemd-logind.service
 1.012s user@0.service
 1.004s logrotate.service
  935ms user@1001.service
  746ms dev-hugepages.mount
  732ms dev-mqueue.mount
  685ms sys-kernel-debug.mount
  677ms systemd-backlight@backlight:acpi_video0.service
  662ms kmod-static-nodes.service
  659ms sys-kernel-tracing.mount
  630ms modprobe@configfs.service
  597ms systemd-remount-fs.service
  574ms systemd-udevd.service
  570ms rpcbind.service
  567ms modprobe@fuse.service
  544ms systemd-modules-load.service
  510ms systemd-sysusers.service
  472ms systemd-timesyncd.service
  441ms systemd-sysctl.service
  431ms systemd-random-seed.service
  402ms systemd-tmpfiles-setup.service
  376ms systemd-update-utmp.service
  323ms systemd-tmpfiles-setup-dev.service
  300ms cpufrequtils.service
  277ms sys-fs-fuse-connections.mount
  178ms mnt-ssd.mount
  168ms systemd-user-sessions.service
  165ms sys-kernel-config.mount
  141ms ifupdown-pre.service
  114ms console-setup.service
  112ms rc-local.service
  104ms nfs-config.service
  101ms systemd-update-utmp-runlevel.service
   98ms systemd-tmpfiles-clean.service
   94ms user-runtime-dir@1001.service
   82ms user-runtime-dir@0.service

Как видно из приведённого выше вывода, каждый блок сортируется в зависимости от времени, которое позволяет узнать, какая утилита занимает наибольшее количество времени при загрузке системы.

Затем мы также можем просмотреть дерево time-critical цепи для конкретной утилиты или вывести список указанных утилит с подкомандой critical-chain:

# systemd-analyze critical-chain

graphical.target @41.278s
└─multi-user.target @41.277s
  └─smbd.service @35.300s +5.966s
    └─nmbd.service @16.506s +18.765s
      └─network-online.target @16.496s
        └─network.target @16.493s
          └─networking.service @15.356s +1.118s
            └─apparmor.service @14.177s +1.135s
              └─local-fs.target @14.169s
                └─mnt-ssd.mount @13.989s +178ms

Наконец, давайте рассмотрим еще одну важную подкоманду, которая позволяет создавать графически (svg-формат) детализированные системные службы, которые были запущены.

Убедитесь, что графический режим отображения или x-windowsвключены для просмотра графика.

# systemd-analyze plot > boot_analysis.svg
# xviewer boot_analysis.svg

Все вышеприведённые команды будут выводить статистику загрузки для локальной машины. Чтобы просмотреть информацию с удалённого хоста по ssh, используйте флаг -Hи укажите директиву username@host, как показано ниже:

# systemd-analyze time -H tecmint@192.168.56.5
# systemd-analyze blame -H tecmint@192.168.56.5
# systemd-analyze critical-chain -H tecmint@192.168.56.5

systemd-analyze также может использоваться для поиска другой информации о состоянии и трассировке системы. Для получения дополнительной информации загляните на страницу man:

# man systemd-analyze