systemd-analyze - Найти статистику производительности загрузки системы в Linux
Вы используете системный и сервисный менеджер systemd, и ваша система Linux загружается дольше обычного, или вы просто хотите просмотреть отчёты о производительности загрузки вашей системы? Если да, вы попали в нужное место.
В этой статье мы покажем вам, как анализировать статистику производительности загрузки системы Linux с помощью systemd-analyze, одной из множества утилит под systemd для управления системой.
Также читают: Как управлять службами Systemd на удалённом сервере Linux
Чтобы получить обзор времени загрузки системы, мы можем выполнить команду systemd-analyze без каких-либо аргументов следующим образом. Она покажет информацию о том, сколько времени занял запуск каждой службы, включая время, затраченное ядром, initrd и пространством пользователя во время загрузки.
# systemd-analyze
Startup finished in 884ms (kernel) + 3.861s (initrd) + 48.356s (userspace) = 53.102s
Если вы хотите просмотреть список всех работающих единиц, отсортированных по времени их инициализации (самое длительное время вверху), для этой цели используется подкоманда blame. После выполнения следующей команды используйте [Enter], чтобы просмотреть больше служб в списке, и q, чтобы выйти.
# systemd-analyze blame
16.159s mariadb.service
12.178s libvirtd.service
10.298s tuned.service
9.836s postfix.service
8.704s lsws.service
7.352s lscpd.service
4.988s [email
4.779s NetworkManager-wait-online.service
4.577s lvm2-monitor.service
4.439s ModemManager.service
4.413s polkit.service
4.280s dev-sda1.device
4.225s systemd-udev-settle.service
3.957s firewalld.service
3.227s rhel-dmesg.service
3.221s abrt-ccpp.service
3.142s rsyslog.service
3.053s avahi-daemon.service
3.042s pure-ftpd.service
2.249s gssproxy.service
2.212s NetworkManager.service
1.889s proc-fs-nfsd.mount
1.780s systemd-tmpfiles-setup-dev.service
1.451s sshd.service
1.267s rhel-readonly.service
1.035s sysstat.service
1.001s rpc-statd-notify.service
910ms systemd-logind.service
739ms kdump.service
738ms network.service
...
Как вы можете видеть из приведённого выше вывода, каждая единица отсортирована по времени выполнения, вы можете просто определить, какая служба занимает больше времени при загрузке, и проанализировать проблему.
Далее мы также можем просмотреть дерево критической по времени цепочки для цели по умолчанию или список указанных единиц с подкомандой critical-chain, как показано.
# 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.
multi-user.target @48.342s
└─mariadb.service @31.560s +16.159s
└─network.target @31.558s
└─network.service @30.819s +738ms
└─NetworkManager-wait-online.service @26.035s +4.779s
└─NetworkManager.service @23.821s +2.212s
└─network-pre.target @23.821s
└─firewalld.service @19.863s +3.957s
└─polkit.service @15.381s +4.413s
└─basic.target @12.271s
└─sockets.target @12.271s
└─virtlockd.socket @12.270s
└─sysinit.target @12.251s
└─systemd-update-utmp.service @12.196s +54ms
└─auditd.service @11.705s +486ms
└─systemd-tmpfiles-setup.service @11.609s +93ms
└─rhel-import-state.service @11.397s +211ms
└─local-fs.target @11.363s
└─run-user-0.mount @46.910s
└─local-fs-pre.target @10.575s
└─lvm2-monitor.service @5.996s +4.577s
└─lvm2-lvmetad.service @7.376s
└─lvm2-lvmetad.socket @5.987s
└─-.slice
# systemd-analyze critical-chain ntp.service networking.service
Наконец, давайте рассмотрим ещё одну важную под-команду, которая позволяет создавать графическую детализацию (в формате svg) системных служб, которые были запущены, и во сколько, выделяя время их инициализации, следующим образом.
Убедитесь, что режим графического отображения или x-windows включен для просмотра графика.
# systemd-analyze plot > boot_analysis.svg
# xviewer boot_analysis.svg
Все вышеперечисленные команды будут выводить статистику производительности при загрузке для локальной машины. Чтобы просмотреть информацию с удалённого хоста через ssh, используйте флаг -H и укажите директиву username@host, как показано.
# systemd-analyze time -H [email
# systemd-analyze blame -H [email
# systemd-analyze critical-chain -H [email
systemd-analyze также можно использовать для получения другой информации о состоянии и трассировке системы и systemd (менеджера служб) и другого. Для получения дополнительной информации смотрите его man-страницу.
# man systemd-analyze
Читайте также: Как изменить уровни выполнения (цели) в SystemD
На этом пока всё! Если у вас есть вопросы или мысли, которыми вы хотите поделиться, используйте форму обратной связи ниже, чтобы связаться с нами.
