Найти в Дзене
Сисадмин

Как траблшутить зависания в Linux

Linux завис? Ну, что ж, добро пожаловать в клуб тех, кто говорит: "Этого не может быть, но это случилось". Давай разберёмся, что можно сделать, прежде чем начать панически гуглить неведомо что или грозить серверу отвёрткой, особенно если сервер по факту не является сервером (то бишь, тупо без IPMI / ILO и прочих вкусняшек). Иногда кажется, что всё пропало, но на самом деле просто тормозит графика или какой-то конкретный процесс. Попробуй: Если не помогло — читай дальше. Если TTY не откликается, попробуй Caps Lock/Num Lock. Если светодиоды загораются и тухнут — ядро, скорее всего, живо, и можно продолжать ковырять. Если не реагирует — то это либо kernel panic, либо твой сервер уже ушёл в астрал. Если консоль доступна: top или htop (если установлен). Ищи процессы с диким CPU или RAM. Особенно подозрительны kworker, java, chrome, firefox и всякие самописные демоны, которые "точно работают идеально". Если виновник найден — попробуй его завершить: kill -9 <PID> (где <PID> — номер процесса).
Оглавление
Как траблшутить зависания в Linux
Как траблшутить зависания в Linux

Linux завис? Ну, что ж, добро пожаловать в клуб тех, кто говорит: "Этого не может быть, но это случилось". Давай разберёмся, что можно сделать, прежде чем начать панически гуглить неведомо что или грозить серверу отвёрткой, особенно если сервер по факту не является сервером (то бишь, тупо без IPMI / ILO и прочих вкусняшек).

1. Проверь, действительно ли система зависла

Иногда кажется, что всё пропало, но на самом деле просто тормозит графика или какой-то конкретный процесс. Попробуй:

  • Переключиться на другой TTY: Ctrl + Alt + F2 (или F3–F6). Если переключилось — значит, проблема в X11/Wayland.
  • Попробовать Ctrl + Alt + Backspace (если включена такая опция) — это прибьёт графическую сессию.
  • Дёрнуть Magic SysRq (если включено): Alt + SysRq + R E I S U B (по буквам: Reboot Even If System Utterly Broken).

Если не помогло — читай дальше.

2. Живо ли ядро?

Если TTY не откликается, попробуй Caps Lock/Num Lock. Если светодиоды загораются и тухнут — ядро, скорее всего, живо, и можно продолжать ковырять. Если не реагирует — то это либо kernel panic, либо твой сервер уже ушёл в астрал.

3. Посмотри, что жрёт ресурсы

Если консоль доступна:

top

или

htop

(если установлен).

Ищи процессы с диким CPU или RAM. Особенно подозрительны kworker, java, chrome, firefox и всякие самописные демоны, которые "точно работают идеально".

Если виновник найден — попробуй его завершить:

kill -9 <PID>

(где <PID> — номер процесса).

Если не помогает — вырубаем замораживающее ядро:

echo 1 > /proc/sys/kernel/sysrq
echo f > /proc/sysrq-trigger

Эта магия прибьёт всех OOM-жрунов (Out of Memory).

4. Логи — наше всё

Открой журнал системы и смотри, что случилось:

journalctl -xe

или

dmesg | tail -50

Если там есть что-то типа "oom-killer invoked", значит, памяти не хватило, и система решила, что ты слишком жирно живёшь.

Проверяем свободную память:

free -m

Если Swap = 0, а RAM забита — виновник найден. Добавь своп:

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

Чтобы было навсегда, добавь в /etc/fstab:

/swapfile none swap sw 0 0

5. Диски живы?

Если диск на грани смерти, система может фризить так, что даже мышка не дёрнется. Проверяем:

iostat -xz 1

или

iotop

Если диск на 100% загружен, а процессов, которые его насилуют, нет — возможны бэдблоки. Гони smartctl:

smartctl -a /dev/sdX

(где sdX — твой диск). Если видишь громаднейшие Reallocated Sectors или Pending Sectors, то скорее всего диску хана. Меняй, пока не поздно.

6. Кто навёл шороху?

Если проблема — неожиданный перегруз системы, смотри, кто последним логинился:

last

или

who

Если там чужие IP — возможно, тебя ломают.

7. Аномалии в сети

Если зависание связано с сетью, проверяй соединения:

ss -tulnp

или

netstat -anp

Если видишь кучу непонятных подключений, а сервисы не работают — возможно, DDoS или кто-то уже тусит в системе.

8. Тяжёлая артиллерия — strace

Если завис конкретный процесс, можно его отследить:

strace -p <PID>

Будет море выводов, но если других вариантов нет - придется разобраться и понять, где именно он завис.

9. Если совсем ничего не помогает

Если система не реагирует ни на что, но ты хочешь избежать жёсткого ребута, попробуй Magic SysRq (если включено в ядре):

echo 1 > /proc/sys/kernel/sysrq

Потом аккуратно:

  • Alt + SysRq + R (переключаем клаву в Raw mode)
  • Alt + SysRq + E (убиваем все процессы)
  • Alt + SysRq + I (если E не помог)
  • Alt + SysRq + S (сбрасываем кэш)
  • Alt + SysRq + U (отмонтируем диски)
  • Alt + SysRq + B (перезагружаем)

Если ничего не помогает — нажми кнопку (да, ту самую на корпусе).

10. Послевкусие

После перезагрузки:

  • Проверь журналы (journalctl, dmesg).
  • Проверь RAM:
memtester 2048M 5

или через BIOS/UEFI.

  • Тестируй диск:
badblocks -sv /dev/sdX
  • Анализируй, кто виноват:
    Последние установленные пакеты:
rpm -qa --last # (для RPM-систем)
dpkg --list | grep -i 'installed' # (для Debian)

Запустился ли какой-то новый сервис?

systemctl list-units --failed

Если проблема повторяется — возможно, пора пересобирать систему, пересматривать конфиги или разбирать железо.

Теперь ты знаешь, как бороться с зависаниями в Linux! Главное — не паниковать, и если что, всегда можно сказать: "Это не баг, это фича!"