Поиск по сайту:

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  

Анализ загрузки Linux

Все вышеперечисленные команды будут выводить статистику производительности при загрузке для локальной машины. Чтобы просмотреть информацию с удалённого хоста через 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

На этом пока всё! Если у вас есть вопросы или мысли, которыми вы хотите поделиться, используйте форму обратной связи ниже, чтобы связаться с нами.