Медленная загрузка Linux? Поиск узких мест и оптимизация служб с помощью systemd-analyze за 3 минуты

Обзор

Если ваш сервер или ПК на базе Linux загружается дольше обычного, необходимо выяснить причину и устранить ненужные задержки. С помощью команды systemd-analyze можно легко измерить общее время загрузки, выявить системные службы, создающие узкие места, и проверить файлы юнитов. В этой статье рассматриваются ключевые команды анализа и методы оптимизации производительности, которые можно сразу применить на практике.

1. Проверка времени загрузки и измерение задержек по этапам (time & blame)

Команда systemd-analyze измеряет и отображает общее время, затраченное на процесс загрузки, а также время инициализации ядра и пространства пользователя (userspace).
Судя по результатам выполнения, системе потребовалось в общей сложности 315ms для загрузки и перехода к графическому окружению graphical.target.
⚙️ [Основные параметры]

time : выводит общее время, затраченное ядром и пространством пользователя при загрузке (поведение по умолчанию).
blame : выводит список служб, замедливших процесс инициализации, в порядке убывания затраченного времени.
critical-chain : отображает дерево зависимостей служб критической цепочки (критического пути), влияющей на задержку загрузки.
plot : экспортирует временную шкалу выполнения всех служб в процессе загрузки в виде графического SVG-файла.
dot : генерирует связи зависимостей между службами в формате Graphviz dot.

systemd-analyze

Команда systemd-analyze blame | head -n 10 сортирует и выводит топ-10 запущенных при загрузке служб с наибольшим временем инициализации в порядке убывания.
В выводе видно, что службы systemd-resolved.service (68ms) и ldconfig.service (67ms) заняли больше всего времени на этапе инициализации при загрузке.

systemd-analyze blame | head -n 10

2. Отслеживание критического пути задержки загрузки (critical-chain)

Команда systemd-analyze critical-chain выводит дерево зависимостей служб (критический путь), которые напрямую повлияли на завершение загрузки системы.
Символ @ в выводе указывает момент времени, когда юнит был активирован или запущен, а символ + обозначает время, затраченное на выполнение самого юнита.
Как видно из результирующего дерева, до достижения graphical.target (315ms) службы systemd-resolved.service (68ms) и systemd-journald.service (39ms) выполнялись последовательно, сформировав ключевое узкое место, вызвавшее общую задержку загрузки.

systemd-analyze critical-chain

Команда systemd-analyze critical-chain networking.service позволяет указать конкретную службу (в данном случае networking.service) и выборочно отследить критическую цепочку только до момента ее запуска.
Это полезно, когда требуется изолированно проанализировать зависимости и узкие места конкретной сетевой или фоновой службы вместо изучения всего системного пути.

systemd-analyze critical-chain networking.service

3. Генерация визуального SVG-отчета с временной шкалой загрузки (plot)

Чтобы систематически сохранять файлы отчетов анализа загрузки и управлять ими, выполните команду mkdir -p ~/systemd-reports для создания отдельного каталога.

mkdir -p ~/systemd-reports

Команда systemd-analyze plot > ~/systemd-reports/boot-analysis.svg формирует и сохраняет графический SVG-файл с визуальной временной шкалой времени запуска и продолжительности работы каждой службы в процессе загрузки.
С помощью графической диаграммы можно наглядно оценить параллельное выполнение служб и интервалы задержек, которые трудно выявить только по текстовым логам.

systemd-analyze plot > ~/systemd-reports/boot-analysis.svg

Команда ls -lh ~/systemd-reports/boot-analysis.svg проверяет наличие созданного SVG-отчета и выводит подробную информацию, включая размер файла (59KB).
Созданный SVG-файл можно открыть в веб-браузере или программе для просмотра изображений для детального визуального анализа графика загрузки.

ls -lh ~/systemd-reports/boot-analysis.svg

4. Проверка ошибок конфигурации юнитов служб и состояния безопасности (verify & security)

Команда sudo systemd-analyze verify /lib/systemd/system/ssh.service предварительно проверяет указанный файл юнита на наличие синтаксических ошибок или пропущенных параметров.
Отсутствие сообщений при выводе означает, что файл юнита службы не содержит синтаксических дефектов или ошибок конфигурации.

sudo systemd-analyze verify /lib/systemd/system/ssh.service

Команда systemd-analyze security ssh.service анализирует параметры изоляции безопасности указанного юнита службы и уровень риска для системы (Security Exposure).
Результаты выполнения позволяют детально проверить статус применения ключевых параметров безопасности, таких как запуск с правами суперпользователя (User=), контроль доступа к устройствам (PrivateDevices=), запрет повышения привилегий (NoNewPrivileges=), а также итоговую оценку уязвимости.

systemd-analyze security ssh.service

Мы кратко рассмотрели, как с помощью команды systemd-analyze выявить службы, вызывающие задержки при загрузке, и оптимизировать их работу.
Отключите ненужные службы, чтобы сделать загрузку Linux более быстрой и комфортной.