Linux Labs

Система изнутри: ресурсы, ядро, процессы / Ступень 10 из 12

От GRUB до target: как загружается система

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 8 · на машине · 4 мин

Кто задержал загрузку

blame и critical-chain отвечают на разные вопросы: сколько запускался каждый юнит и кого загрузка ждала.

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

systemd-analyze critical-chain (в Вики) показывает цепочку, по которой загрузка дошла до цели позже всего. Цепочка идёт от цели вниз: под каждым юнитом — тот, кого он ждал последним. Число после @ — когда юнит стал активен, от начала работы служб; число после + — сколько он запускался. Юниты, которые закончили работу и не остались активными, в цепочку не попадают, как и всё, что запустили после загрузки.

Цепочку можно спросить и для одного юнита:

bash
systemd-analyze critical-chain nginx.service
Проверь себя 1 вопрос

В blame у юнита 2 секунды — это вторая строка списка, но в critical-chain его нет. Почему?

  • Упавший юнит виден в systemctl --failed; здесь его нет. blame меряет время запуска любого юнита, а в цепочку попадают только те, кого ждали последними.

  • blame считает время от начала до конца запуска самого юнита — 2 секунды он и правда запускался. Цепочка показывает другое: кого цель ждала.

systemd запускает юниты параллельно: долгий юнит мог закончить раньше, чем те, кого цель ждала дольше. critical-chain показывает только последних в очереди ожидания, поэтому смотрят оба вывода.

Главное в шаге

  • blame — сколько запускался каждый юнит; юниты стартуют параллельно, и долгий юнит не обязательно задержал загрузку.
  • critical-chain — кого загрузка ждала: @ — когда юнит стал активен, + — сколько он запускался.
Ubuntu 24.04
Загрузка…