Подкачка включается не та или не в том порядке
При нескольких разделах подкачки ядро выбирает их по приоритету, а при равных приоритетах распределяет нагрузку между ними. Без явных приоритетов порядок зависит от порядка активации, и быстрый диск может простаивать, пока используется медленный.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Приоритеты не заданы
При равных приоритетах ядро использует разделы одновременно. Быстрый и медленный диск получают одинаковую нагрузку, и подкачка работает со скоростью медленного.
-
Часть разделов подкачки не активирована
Unit подкачки может быть в состоянии сбоя, а остальная система работать. Доступный объём оказывается меньше ожидаемого.
-
Подкачка на сетевом или съёмном носителе
Подкачка на ненадёжном носителе означает зависание системы при его недоступности. Ядро не может продолжать без страниц.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Активные разделы подкачки, их размер, использование и приоритет.
swapon --show=NAME,TYPE,SIZE,USED,PRIOСостояние всех unit подкачки.
systemctl list-units --type=swap --all --no-legendОписание разделов подкачки и их параметры.
grep -E "\sswap\s" /etc/fstabРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- При равных приоритетах ядро использует разделы одновременно. Быстрый и медленный диск получают одинаковую нагрузку, и подкачка работает со скоростью медленного.
- Как проверить
-
Посмотрите активную подкачку и приоритеты.
swapon --show=NAME,TYPE,SIZE,USED,PRIO grep -E "\sswap\s" /etc/fstab
- Как исправить
- Задайте приоритеты явно в параметрах: выше значение — раньше используется. Быстрому носителю стоит дать больший приоритет.
- Почему происходит
- Unit подкачки может быть в состоянии сбоя, а остальная система работать. Доступный объём оказывается меньше ожидаемого.
- Как проверить
-
Посмотрите unit подкачки и их состояние.
systemctl list-units --type=swap --all --no-legend swapon --show
- Как исправить
- Разберите отказ конкретного unit подкачки. Несовпадение идентификатора устройства — самая частая причина.
- Почему происходит
- Подкачка на ненадёжном носителе означает зависание системы при его недоступности. Ядро не может продолжать без страниц.
- Как проверить
-
Посмотрите, где находятся разделы подкачки.
swapon --show=NAME,TYPE; lsblk -o NAME,TRAN,MOUNTPOINT | head
- Как исправить
- Держите подкачку только на локальных надёжных носителях. Отказ носителя с подкачкой приводит к зависанию, а не к ошибке.
Пример вывода
Два раздела с равным приоритетом используются одновременно. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ swapon --show=NAME,TYPE,SIZE,USED,PRIO
NAME TYPE SIZE USED PRIO
/dev/sdb2 partition 4G 1.2G -2
/dev/sdc1 partition 4G 1.2G -3
systemd[1]: Activated swap /dev/sdb2.
systemd[1]: Activated swap /dev/sdc1.
Связанные ошибки
- Подкачка не подключается: swap-unit в состоянии failed Раздел или файл подкачки не активируется: неверный UUID, файл с дырами, права, приоритет.
- Failed with result 'oom-kill' Состояние oom-kill: процесс службы убит из-за нехватки памяти. Как понять, упёрлись в предел службы или в память машины.
- Узел кластера не поднимается: включён раздел подкачки Служба узла кластера отказывается стартовать при включённой подкачке. Как отключить правильно.
- Ограничение процессора: доля и жёсткий предел работают по-разному Служба то тормозит, то нет: доля процессора и жёсткий предел решают разные задачи и путать их нельзя.
- Перегрев: частота снижена, службы работают медленнее Ядро сообщает о снижении частоты из-за температуры. Службы отвечают медленнее без ошибок в своих журналах.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Failed to parse calendar expression: ошибка в OnCalendar systemd не разбирает календарное выражение таймера. Правила записи OnCalendar и проверка через systemd-analyze calendar.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
Источники
-
systemd.swap(5)
Unit подкачки и их параметры. -
systemd.swapon(8)
Приоритеты разделов подкачки. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на тестовой машине с двумя разделами подкачки.