Введение
Swap-память (подкачка) — критически важный механизм виртуальной памяти в Linux. Когда оперативная память (RAM) заполняется, ядро автоматически перемещает неактивные страницы памяти в swap-область на диске, что позволяет избежать падения процессов из-за нехватки памяти. Однако чрезмерное использование swap может привести к значительному замедлению системы, так как диски медленнее RAM.
Мониторинг swap-пространства помогает:
- Диагностировать проблемы с нехваткой памяти.
- Оценить, достаточно ли установленной оперативной памяти.
- Принять решение о настройке или увеличении swap.
- Оптимизировать производительность системы, регулируя параметры ядра, такие как
vm.swappiness.
В этом гайде вы освоите несколько стандартных способов проверки использования swap в Linux, от простого просмотра общей информации до детального мониторинга в реальном времени.
Требования
Перед началом убедитесь, что:
- У вас есть доступ к терминалу Linux (локально или через SSH).
- Вы знакомы с основами работы командной строки.
- Для выполнения всех команд не требуются права администратора (sudo), за исключением случаев проверки swap на защищённых устройствах (но основные утилиты, такие как
freeиcat /proc/swaps, доступны всем пользователям). - Система имеет настроенный swap (раздел или файл). Если swap отсутствует, команды покажут нулевые значения.
Шаг 1: Используйте команду free
Команда free — самый быстрый способ получить общую сводку по оперативной и swap-памяти.
Выполните в терминале:
free -h
Ключ -h (human-readable) преобразует размеры в килобайты, мегабайты или гигабайты для удобочитаемости.
Пример вывода на системе с 8 ГБ RAM и 2 ГБ swap:
total used free shared buff/cache available
Mem: 7.7G 1.2G 5.1G 156M 1.4G 6.1G
Swap: 2.0G 0B 2.0G
Ключевые столбцы для swap:
total: общий размер swap-пространства.used: текущее использованное пространство (в данном примере 0B — swap не используется).free: свободное swap-пространство.
Если в used ненулевое значение, система активно использует swap. Столбец available в строке Mem показывает примерный объём памяти, доступной для новых процессов без использования swap.
Шаг 2: Проверьте детали в /proc/swaps
Файл /proc/swaps предоставляет подробную информацию о каждом активном swap-устройстве (разделе или файле).
Выполните:
cat /proc/swaps
Пример вывода:
Filename Type Size Used Priority
/dev/sda2 partition 2097148 0 -2
/swapfile file 1048572 0 -1
Расшифровка:
Filename: путь к swap-разделу (например,/dev/sda2) или swap-файлу (например,/swapfile).Type: тип устройства —partition(раздел диска) илиfile(файл).Size: общий размер в килобайтах (здесь ~2 ГБ и ~1 ГБ соответственно).Used: использованный размер в килобайтах.Priority: приоритет swap (отрицательные значения; чем выше число, тем выше приоритет). Система использует swap с более высоким приоритетом в первую очередь.
Этот файл обновляется ядром в реальном времени и не требует дополнительных прав для чтения.
Шаг 3: Мониторинг в реальном времени с top
Утилита top отображает динамическую информацию о процессах и системных ресурсах. По умолчанию она не показывает swap в основном интерфейсе, но это можно настроить.
- Запустите
top:top - Нажмите клавишу
f(илиFв некоторых версиях), чтобы открыть меню управления полями. - В списке полей найдите строку
SWAP(обычно внизу). Нажмите соответствующую букву (частоdилиs), чтобы добавить столбец swap в основное окно. Для сортировки по swap можно нажатьsпри выделении столбца. - Нажмите
Enter, чтобы вернуться к основному экрану.
Теперь в выводе top появится столбец SWAP, показывающий использование swap каждым процессом (если процесс его использует). В верхней части экрана также отображается общая строка памяти, включая swap (столбцы KiB Swap или аналогичные, в зависимости от версии top).
top обновляется каждые 3 секунды по умолчанию. Для изменения интервала нажмите d и введите нужное значение.
Шаг 4: Используйте vmstat для статистики swap-активности
Команда vmstat (virtual memory statistics) выводит статистику по виртуальной памяти, включая активность swap, что полезно для анализа трендов.
Выполните:
vmstat 1
Параметр 1 указывает обновлять вывод каждую секунду. Для остановки нажмите Ctrl+C.
Пример вывода:
procs -----------memory---------- ---swap-- -----io------ -system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 5242880 12345 678901 0 0 0 0 123 456 2 1 97 0 0
Ключевые столбцы, связанные с swap:
swpd: использованный swap в килобайтах (здесь 0 — swap не используется).si(swap in): количество памяти, перемещённой из swap в RAM за секунду (килобайты). Ненулевые значения указывают, что система читает данные из swap, что замедляет работу.so(swap out): количество памяти, перемещённой из RAM в swap за секунду (килобайты). Высокие значения означают активную запись в swap.
Постоянные ненулевые значения в si и so сигнализируют о том, что система активно использует swap, что может быть признаком нехватки RAM.
Проверка результата
После выполнения шагов вы должны получить чёткую картину использования swap:
- Команда
free -hпоказала общие значения: еслиusedв строке Swap ненулевой, swap активен. /proc/swapsвыявила все swap-устройства и их состояние. Если файл пуст, swap не настроен.topпозволила наблюдать за swap в реальном времени и определить процессы, которые его используют (если есть).vmstatдала статистику по операциям swap in/out, помогая оценить нагрузку.
Если swap не используется (все показатели нулевые), а вы ожидаете его наличие, проверьте, активирован ли swap через swapon --show или в /etc/fstab. Если swap отсутствует, создайте его, следуя гайду по настройке swap-файла.
Возможные проблемы
Swap не отображается или показывает нулевые значения
Если free и /proc/swaps показывают нулевой swap, скорее всего, swap не настроен. Решение:
- Проверьте наличие swap-раздела с помощью
lsblkилиfdisk -l. - Если раздела нет, создайте swap-файл:
sudo fallocate -l 2G /swapfile, затемchmod 600 /swapfile,mkswap /swapfile,swapon /swapfile. - Добавьте запись в
/etc/fstabдля постоянного монтирования:/swapfile none swap sw 0 0.
Ошибка "Permission denied" при чтении /proc/swaps
Обычно /proc/swaps доступен для чтения всем. Если возникает ошибка, возможно, система имеет укреплённые настройки безопасности (например, SELinux в режиме enforcing). Попробуйте выполнить с sudo, но для диагностики это редко требуется. Проверьте права: ls -l /proc/swaps (должен быть -r--r--r--).
Команда top не показывает столбец swap
Убедитесь, что вы правильно добавили поле SWAP в настройках top. В некоторых версиях (например, htop) swap отображается по умолчанию. Также помните, что столбец swap может быть пустым, если ни один процесс не использует swap напрямую (swap управляется ядром глобально, а не на уровне процессов).
Высокий swap usage и низкая производительность
Если vmstat показывает постоянные ненулевые si и so, а система тормозит:
- Увеличьте оперативную память, если возможно.
- Оптимизируйте приложения: найдите процессы, потребляющие много памяти, через
top(сортировка по%MEM). - Настройте параметр
vm.swappiness(от 0 до 100), контролирующий агрессивность использования swap. Проверьте текущее значение:cat /proc/sys/vm/swappiness. Рекомендуемые значения: 10-20 для серверов, 60 для десктопов. Измените временно:sudo sysctl vm.swappiness=10, или постоянное — добавьтеvm.swappiness=10в/etc/sysctl.conf. - Рассмотрите добавление дополнительного swap-файла на быстром SSD, если swap необходим.