systemd
– это современный системный менеджер для Linux-систем, который управляет процессами запуска, останова и мониторинга служб, а также других задач, связанных с инициализацией системы. Одной из полезных утилит, входящих в состав systemd
, является systemd-analyze
. Эта утилита предоставляет инструменты для анализа производительности загрузки системы, времени выполнения различных процессов и диагностики проблем с загрузкой.
Основные функции systemd-analyze
Анализ времени загрузки (systemd-analyze time
)¶
Команда systemd-analyze time
позволяет увидеть общее время загрузки системы и разбивку этого времени по различным этапам:
$ systemd-analyze time
Startup finished in 4.011s (kernel) + 6.923s (userspace) = 10.934s
graphical.target reached after 6.903s in userspace
В этом примере видно, что общая загрузка заняла около 11 секунд, из которых 4 секунды ушло на загрузку ядра, а оставшиеся 7 секунд – на запуск пользовательских сервисов и целей.
Разбор вывода команды:¶
-
Startup finished in X.XXs (kernel) – время, затраченное на загрузку ядра.
-
+ Y.YYs (userspace) – время, потраченное на инициализацию пользовательского пространства.
-
= Z.ZZZs – суммарное время загрузки системы.
-
graphical.target reached after W.WWs in userspace – время достижения графической цели (обычно это цель, при которой загружается графический интерфейс).
Эта команда полезна для выявления узких мест в процессе загрузки системы.
Анализ критического пути загрузки (systemd-analyze critical-chain
)¶
Команда systemd-analyze critical-chain
показывает критический путь загрузки – последовательность зависимых сервисов, которая занимает больше всего времени. Это помогает понять, какие сервисы замедляют загрузку системы.
Пример использования:
$ systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.
graphical.target @8.328s
└─multi-user.target @8.327s
└─getty.target @8.326s
└─serial-getty@ttyS0.service @8.324s +1ms
└─sysinit.target @8.321s
└─systemd-tmpfiles-setup.service @7.987s +333ms
└─local-fs.target @7.982s
└─run-sys\x2dmount\x2dunit\x2ddisk\x2dbuild.service @7.362s +615ms
└─basic.target @618ms
└─sockets.target @617ms
└─dbus.socket @616ms
└─-.slice @200ms
Здесь мы видим, что самым долгим процессом был сервис run-sysmount-unit-disk-build.service
, который занял 615 мс. Этот вывод может дать представление о том, где именно система тратит наибольшее количество времени.
Измерение времени выполнения отдельных юнитов (systemd-analyze blame
)¶
Команда systemd-analyze blame
выводит список всех запущенных юнитов, отсортированных по времени их выполнения. Это полезно для определения того, какой конкретный юнит задерживает загрузку системы.
Пример использования:
$ systemd-analyze blame
19.442s NetworkManager-wait-online.service
18.421s plymouth-quit-wait.service
15.223s dev-sda5.device
14.789s lvm2-monitor.service
13.567s snapd.service
12.876s accounts-daemon.service
11.234s udisks2.service
9.456s ModemManager.service
8.432s avahi-daemon.service
7.678s bluetooth.service
6.900s networkd-dispatcher.service
6.098s wpa_supplicant.service
5.334s systemd-logind.service
4.988s systemd-journald.service
4.667s polkit.service
4.232s upower.service
3.898s systemd-rfkill.service
3.345s user@1000.service
2.776s systemd-udevd.service
2.434s apparmor.service
2.123s systemd-resolved.service
1.765s colord.service
1.332s systemd-modules-load.service
1.231s systemd-backlight@backlight:intel_backlight.service
1.099s rtkit-daemon.service
984ms swapfile.swap
964ms systemd-timesyncd.service
943ms systemd-remount-fs.service
926ms gpu-manager.service
908ms thermald.service
887ms systemd-sysctl.service
866ms systemd-binfmt.service
845ms keyboard-setup.service
824ms grub-common.service
803ms systemd-update-utmp-runlevel.service
782ms pppd-dns.service
761ms systemd-machine-id-commit.service
740ms systemd-tmpfiles-setup-dev.service
719ms console-setup.service
698ms kmod-static-nodes.service
677ms systemd-journal-flush.service
656ms systemd-udev-trigger.service
635ms systemd-tmpfiles-setup.service
614ms systemd-random-seed.service
593ms systemd-fsck@dev-disk-by\x2duuid-EA31\x2dEAE2.service
572ms systemd-update-utmp.service
551ms systemd-sysusers.service
530ms systemd-tmpfiles-clean.timer
509ms systemd-user-sessions.service
488ms sys-kernel-debug.mount
467ms sys-fs-fuse-connections.mount
446ms dev-hugepages.mount
425ms dev-mqueue.mount
404ms tmp.mount
383ms sys-kernel-config.mount
362ms boot-efi.mount
341ms systemd-udev-settle.service
320ms proc-sys-fs-binfmt_misc.automount
299ms systemd-tmpfiles-clean.service
278ms systemd-journal-catalog-update.service
257ms systemd-ask-password-wall.path
236ms systemd-ask-password-console.path
215ms systemd-vconsole-setup.service
194ms systemd-sysctl.service
173ms systemd-localed.service
152ms systemd-hostnamed.service
131ms systemd-timedated.service
110ms systemd-networkd-wait-online.service
89ms systemd-time-wait-sync.service
68ms systemd-random-seed.service
47ms systemd-journald-audit.socket
26ms systemd-journal-socket.service
05ms systemd-journald.socket
Этот пример показывает, что самый долгий юнит – NetworkManager-wait-online.service
, который выполнялся почти 20 секунд. Такой анализ поможет вам определить, какие процессы могут быть оптимизированы для ускорения загрузки системы.
Генерация графика загрузки (systemd-analyze plot > output.svg
)¶
Команда systemd-analyze plot
генерирует SVG-файл, содержащий график загрузки системы. Это визуальное представление процесса загрузки, которое удобно для анализа и представления результатов.
Пример использования:
$ systemd-analyze plot > output.svg
После выполнения этой команды вы получите файл output.svg
, который можно открыть любым браузером или редактором изображений для просмотра графика загрузки.
Анализ состояния системы (systemd-analyze dump
)¶
Команда systemd-analyze dump
выводит подробную информацию о текущем состоянии системы, включая данные о запущенных процессах, сервисах и событиях.
Пример использования:
$ systemd-analyze dump
Это может быть полезно для отладки и поиска причин сбоев в работе системы.
Проверка целостности юнитов (systemd-analyze verify
)¶
Команда systemd-analyze verify
проверяет синтаксическую корректность файлов юнитов. Она сообщает об ошибках в конфигурационных файлах, что помогает предотвратить проблемы при запуске сервисов.
Пример использования:
$ systemd-analyze verify /etc/systemd/system/myservice.service
Определение зависимости между юнитами (systemd-analyze dot
)¶
Команда systemd-analyze dot
создает графическое представление зависимостей между юнитами. Результат сохраняется в формате DOT, который можно преобразовать в изображение с помощью инструментов вроде Graphviz.
Пример использования:
$ systemd-analyze dot | dot -Tsvg > dependencies.svg
Теперь у вас есть файл dependencies.svg
, который содержит диаграмму зависимостей между юнитами.