...

Правильная настройка параметра vm.swappiness для обеспечения оптимальной производительности сервера

Я покажу, как настроить параметр vm.swappiness так, чтобы веб-сервисы и службы баз данных на хостинговых серверах реагировали быстрее и вызывали меньшую нагрузку на ввод-вывод. Благодаря четким инструкциям, оптимальным начальным значениям и мониторингу вы сможете более эффективно использовать имеющийся объем оперативной памяти и снизить Задержки и предотвращаешь ненужный своп.

Центральные пункты

Эти пункты дадут тебе краткий обзор, который поможет сразу же применить на практике советы по настройке.

  • Поведение Swappiness: Определяет, как рано ядро начинает перемещать ОЗУ в область подкачки.
  • Связь с рабочей нагрузкой: Настройте параметры в соответствии с типом приложения, например, базой данных или веб-приложением.
  • Временное тестирование: Сначала проверить в режиме реального времени, а затем зафиксировать на постоянной основе.
  • Схема размещения свопов: учитывать масштаб, контекст и приоритеты.
  • Мониторинг: Мониторинг и настройка ввода-вывода, оперативной памяти и времени отклика.
Оптимально настроенный сервер для превосходной производительности

Что такое vm.swappiness и как оно работает

Параметр ядра vm.swappiness определяет, насколько активно Linux перемещает страницы памяти из ОЗУ в область подкачки. Текущее значение можно найти в псевдофайловой системе по пути /proc/sys/vm/swappiness и изменить его как во время работы системы, так и на постоянной основе. Высокое значение приводит к более раннему перемещению данных в область подкачки, а низкое — к более длительному удержанию содержимого в оперативной памяти. Цель заключается в достижении оптимального баланса между загрузкой оперативной памяти, кэшем страниц и контролируемым поведением области подкачки. Я всегда помню: оперативная память работает намного быстрее, чем любой SSD, поэтому я предпочитаю Рабочая память явно до свопа.

Почему Swappiness имеет значение на хостинг-серверах

На веб-серверах и серверах приложений настройка параметра Swappiness о времени отклика и пропускной способности. Агрессивная подкачка создает дополнительную нагрузку на ввод-вывод и замедляет обработку запросов, особенно при рабочих нагрузках, интенсивно использующих базы данных. С другой стороны, слишком низкие значения создают риск возникновения впоследствии событий OOM, которые приводят к внезапному завершению процессов. Поэтому я оцениваю не только объем оперативной памяти и пространство подкачки, но и типичные пики нагрузки, кэши и модели запросов. Снижение задержек позволяет избежать рывков в работе и значительно ускорить выполнение транзакций жидкость.

Рекомендации в зависимости от рабочей нагрузки

Одно значение редко подходит для всех сценариев, поэтому я начинаю с проверенных на практике диапазонов, а затем подстраиваю их под данные измерений. Базы данных выигрывают от очень низких настроек, тогда как чистые веб-серверы часто могут работать с несколько более высокими значениями. Тестовые или разработческие системы могут работать ближе к стандартным настройкам, поскольку удобство играет в них более важную роль. Следующую схему я использую в качестве практического введения для Хостинг-Рабочие нагрузки. Затем я отслеживаю операции ввода-вывода, использование свопа и время отклика, а затем вношу необходимые корректировки.

Рабочая нагрузка Рекомендуемый показатель Swappiness Цель
Базы данных (MySQL, PostgreSQL) 0–10 Сохранять буфер в ОЗУ, минимизировать задержки
В реальном времени/с низкой задержкой 0–10 Как избежать пиковых нагрузок на ввод-вывод с помощью файла подкачки
веб-сервер с кэшами 10–20 (иногда 10–30) Переместить «холодные» страницы, оставить активные запросы в ОЗУ
Разработка/Тестирование 30–60 Комфорт и стабильность важнее задержки

Проверить текущее значение

Прежде чем изменять значения, я считываю состояние и фиксирую Базовый уровень. Для этого я использую команду `cat /proc/sys/vm/swappiness` или `sysctl vm.swappiness` — оба способа выдают число, например 60. Параллельно я проверяю загрузку ОЗУ и свопа с помощью команды `free -h`. С помощью команды swapon –show я определяю размер, приоритет и носитель активных устройств подкачки. Эти исходные данные помогают мне позже оценить эффект выделить чтобы быть в состоянии.

Сначала провести временное тестирование, а не сразу вносить постоянные изменения

Сначала я установлю Swappiness в пробном режиме, чтобы посмотреть, как пользователи отреагируют в реальных условиях Загрузить . Команда sysctl vm.swappiness=10 вступает в силу немедленно, но действует только до перезагрузки. Во время тестирования я слежу за показателями top или htop, проверяю vmstat и iostat и измеряю время отклика служб. Если частота использования свопа снижается, а задержки остаются стабильными, я продолжаю действовать, делая разумные шаги. Только когда показатели становятся убедительными, я записываю значение постоянная твердо.

Настроить на постоянной основе

Если тестовое значение подходит, я вношу его в конфигурацию sysctl и перезагружаю настройки. В файле /etc/sysctl.conf я добавляю строку vm.swappiness=10 и активирую её с помощью команды sysctl -p. Для большей упорядоченности я создаю отдельный файл в каталоге /etc/sysctl.d/, например 99-swappiness.conf, и загружаю его с помощью команды sysctl –system. Такой подход удобен для управления версиями и интеграции в системы автоматизации. Подробный обзор связанных параметров представлен в этой статье по адресу настройка sysctl, который помогает мне систематизировать изменения и Ясность приносит.

Размер свопа, схема размещения памяти и носители данных

Swappiness никогда не действует изолированно, поэтому я оцениваю размер и расположение Обмен всегда учитывать. Слишком маленький объем свопа быстро заполняется, а чрезмерно большой объем свопа удлиняет фазы ввода-вывода в условиях высокой нагрузки. На SSD или NVMe своп работает быстрее, чем на HDD, однако оперативная память по-прежнему опережает их на несколько порядков. Использование нескольких устройств свопа с приоритетами помогает в первую очередь задействовать самый быстрый носитель. Те, кто хочет глубже изучить преимущества и недостатки, найдут в этом обзоре Своп в хостинге полезные идеи для размышлений о Практика.

Рабочий процесс в практике: шаг за шагом

Начну с анализа текущего состояния: запишу текущее значение Swappiness, загрузку оперативной памяти и файлового обмена, загрузку процессора и ввода-вывода и сохраню эти данные как Ссылка сохраняю. Затем я классифицирую рабочую нагрузку: преимущественно база данных, веб с кэшем, смешанная нагрузка или контейнерная среда. После этого я определяю целевое значение: для баз данных — 0–10, для веб-приложений — обычно 10–20, для смешанных нагрузок — осторожно подбираю значение. Я устанавливаю значение временно, наблюдаю за несколькими фазами нагрузки и сравниваю метрики. Если картина повторяется, я фиксирую значение, документирую изменение и проверяю его после обновления ядра, аппаратного обеспечения или Выпуск-Снова переключить.

Специальные сценарии: контейнеры, виртуальные машины и облако

В контейнерах и виртуальных машинах я настраиваю параметр swappiness на уровне хоста и гостевой системы совместно . Такие системы оркестрации, как Kubernetes, обычно выигрывают от очень низких настроек на рабочих узлах, чтобы минимизировать задержки в работе под. В виртуальных машинах я устанавливаю подходящие значения, но слежу за тем, чтобы гипервизор не работал вразрез с ними. В эластичных облачных конфигурациях консервативные значения помогают сглаживать пиковые нагрузки до тех пор, пока не сработает масштабирование. Я стараюсь избежать ситуации, когда один контейнер из-за интенсивного использования свопа загружает всю Платформа тормозит.

Мониторинг и устранение неисправностей

Типичными признаками неправильно настроенного параметра swappiness я считаю высокую нагрузку на ввод-вывод при наличии свободной оперативной памяти, скачки времени отклика и медленные запросы к базе данных. Такие паттерны я проверяю с помощью vmstat, iostat, sar, а также метрик из моего стека наблюдаемости. Если система активно использует своп-пространство, несмотря на наличие свободной оперативной памяти, я обычно снижаю значение swappiness. Если я вижу журналы OOM или сбои при нехватке оперативной памяти, я умеренно повышаю значение swappiness или корректирую настройки свопа. В следующей таблице приведены симптомы вероятной Причина и задает первоначальное направление.

Симптом Вероятная причина Следующий шаг
Высокая пропускная способность ввода-вывода при наличии свободной оперативной памяти Слишком высокий показатель Swappiness Снизить показатель, оценить эффективность
События OOM под нагрузкой Слишком низкий показатель Swappiness или недостаточный объем свопа Увеличить значение, проверить размер свопа
Медленные запросы несмотря на резерв мощности процессора Буфер базы данных выгружен Значение в диапазоне от 0 до 10, анализ буфера DB
Пики нагрузки без узкого места в процессоре Пиковые нагрузки на ввод-вывод, вызванные операциями свопинга Снизить показатель Swappiness, проверить количество попаданий в кэш

Понимание мелкозернистых показателей

Чтобы объективно оценить показатель swappiness, я более подробно изучаю счетчики ядра. В файле /proc/vmstat показатели pswpin и pswpout отражают количество страниц, загруженных в память и выгруженных из памяти, соответственно. Показатели pgscan_kswapd_* и pgsteal_* показывают, насколько агрессивно работает реклеймер. Если часто встречаются pgmajfault (Major Page Faults), это указывает на перезагрузки, связанные с интенсивными операциями ввода-вывода. Я слежу за этими значениями повторно или с помощью команд sar -B и sar -W, чтобы видеть динамику, а не только моментальные снимки. С помощью vmstat 1 я отслеживаю si/so (Swap in/out) и могу соотнести всплески с реальными событиями. В дополнение к этому /proc/pressure/memory даёт оценку того, насколько сильно задачи страдают от давления на память блок (PSI). Если эти показатели растут частично или полностью, это является явным признаком слишком агрессивного реклайма или неподходящего значения swappiness.

Swappiness 0 против 1: что на самом деле делает ядро

Часто считается, что значение Swappiness=0 полностью отключает подкачку. Это не совсем так. Значение 0 сигнализирует ядру, что подкачку следует избегать по возможности и использовать только при реальной нехватке памяти. На практике значения от 1 до 10 достаточно для обеспечения очень сдержанного поведения, тогда как значение 0 в некоторых версиях может иногда приводить к запоздалым, но зато интенсивным фазам освобождения памяти. Для сервисов, чувствительных к задержкам, я обычно устанавливаю значение 1–5 и наблюдаю, остаются ли показатели pswpout/pswpin практически на нуле. Если при значении 0 во время пиковых нагрузок возникают события OOM, я слегка увеличиваю значение, чтобы ядро раньше начинало плавно снижать нагрузку, а не резко взломать.

Эффективное использование Zswap и ZRAM

Помимо классического свопа на диск, в зависимости от профиля я использую Zswap или ZRAM. Zswap сжимает выгруженные страницы и сначала хранит их в оперативной памяти, а затем, при необходимости, перемещает на носитель. Это снижает количество операций ввода-вывода и сглаживает задержки, но требует ресурсов процессора. На хостах с большим запасом мощности процессора это более прибыльный Компромисс. ZRAM предоставляет сжатый своп непосредственно в оперативной памяти — идеальное решение для пиковых нагрузок или очень маленьких виртуальных машин, в которых я предпочитаю использовать сжатую оперативную память вместо медленного ввода-вывода. Важно: я сознательно выбираю одну из концепций и расставляю приоритеты так, чтобы в первую очередь обслуживался самый быстрый путь. При этом параметр swappiness остаётся инструментом управления: даже при использовании Zswap/ZRAM я хочу избежать ненужных волн освобождения памяти.

Кэш страниц, vfs_cache_pressure и попадания в кэш

Параметр Swappiness взаимодействует с кэшем страниц, который хранит файлы и иноды в оперативной памяти. С помощью параметра vm.vfs_cache_pressure я регулирую, насколько активно ядро очищает эти кэши при появлении анонимных страниц. Слишком высокие значения приводят к слишком быстрому исчезновению кэшей метаданных, что замедляет работу веб-серверов. Обычно я начинаю с значений 50–100, измеряю коэффициент попадания в кэш и наблюдаю за поведением задержек при работе со статическими ресурсами и ответами API. Цель состоит в том, чтобы удерживать часто используемый контент в оперативной памяти, не позволяя редко используемым страницам перегружать оперативную память. Если коэффициент попадания в кэш остается хорошим, а нагрузка на ввод-вывод — низкой, значит, настройки сбалансированы; в противном случае я корректирую параметры swappiness и vfs_cache_pressure в Тандем.

Предотвращение «грязной» записи и пиковых нагрузок на ввод-вывод

Пути записи влияют на задержки так же, как и своп. С помощью параметров vm.dirty_background_ratio/bytes и vm.dirty_ratio/bytes я определяю, какой объём «грязного» кэша будет накоплен, прежде чем ядро начнёт запись. Я предпочитаю использовать *_bytes вместо процентов для установки определённых верхних пределов — особенно в конфигурациях с большим объёмом ОЗУ, где процентные значения могут вызывать огромные волны записи обратно в кэш. Цель: непрерывная, планируемая запись вместо спорадических пиков, которые вместе с подкачкой вызывают блокировки ввода-вывода. Я отслеживаю iostat и очереди записи и поддерживаю значения таким образом, чтобы SSD/NVMe работали с постоянной загрузкой, но не переехать стать.

NUMA, Zone Reclaim и крупные хосты

На системах с NUMA локальность памяти играет важную роль. Если параметр vm.zone_reclaim_mode включен, ядро может более агрессивно освобождать память на локальном узле NUMA, что может непреднамеренно вызывать пиковые нагрузки при реклайме. Для многих хостинговых рабочих нагрузок я отключаю Zone Reclaim и оставляю размещение памяти на усмотрение планировщика, чтобы добиться более стабильного поведения. Кроме того, я проверяю настройку Transparent Huge Pages (THP): Базы данных часто лучше реагируют на настройки THP=never или madvise, поскольку незапланированная дефрагментация и выделение THP-страниц могут вызывать пики задержки. Показатель swappiness может быть идеальным — но если THP или политики NUMA вмешиваются, то Рывки.

Единицы измерения контейнеров и cgroups

С Cgroups v2 у меня появляются дополнительные средства управления помимо параметра host-swappiness: memory.high обеспечивает плавное освобождение памяти, memory.max устанавливает жесткие верхние пределы, а memory.swap.max ограничивает объем свопа для каждой рабочей нагрузки. Таким образом я предотвращаю ситуацию, когда отдельные контейнеры замедляют работу хоста из-за использования свопа. Я устанавливаю на узле низкие значения swappiness и присваиваю критически важным рабочим нагрузкам приоритет с помощью параметра memory.low, чтобы их «горячие наборы» дольше оставались в оперативной памяти. В Kubernetes я слежу за тем, как узел обрабатывает своп, и сначала тестирую изменения в непроизводственных пулах. Важно учитывать общую картину: параметры хоста, ограничения cgroup и оркестратор должны быть согласованы, иначе нагрузка просто переместится с одного уровня на другие.

Внедрение, автоматизация и рецидив

Я внедряю изменения Swappiness, как и любую оптимизацию производительности, контролируемым образом: сначала на небольшой группе практически идентичных узлов (Canary), затем постепенно расширяя охват. Systemd-sysctl или система управления конфигурацией обеспечивают воспроизводимое применение этих значений. Я документирую начальные и конечные значения, временные отметки, задействованные хосты и Метрики. На случай рецидива я заранее планирую соответствующее изменение (например, sysctl vm.swappiness=60) и сохраняю предыдущие файлы sysctl. Во время окон технического обслуживания я специально измеряю типичные сценарии нагрузки, чтобы не перепутать изменения с колебаниями в зависимости от времени суток или трафика. Только так решения остаются обоснованными и согласованными в команде понятный.

Распространенные заблуждения и антипаттерны

  • „Swappiness=0 отключает подкачку“: Нет, ядро по-прежнему использует своп — но очень сдержанно.
  • „Чем больше своп, тем надежнее“: Слишком большой объем файла подкачки удлиняет периоды нагрузки и маскирует дефицит оперативной памяти, вместо того чтобы его устранять.
  • „С NVMe на выгрузке данных не имеет значения“: NVMe работает быстро, но на несколько порядков медленнее, чем ОЗУ. Задержки остаются заметными.
  • „Один параметр для всех серверов“: Рабочие нагрузки сильно различаются. Без измерений настройка сводится к делу случая.
  • „Swappiness устраняет любую задержку“: Часто проблемы связаны с попаданиями в кэш, отложенной записью, THP, планами запросов или сетевыми путями.

Краткое руководство для быстрого старта

Обычно я устанавливаю значение vm.swappiness для веб-серверов на уровне 10–20, а для баз данных — на уровне 0–10, проверяю результат и отслеживаю показатели ввода-вывода, задержки и Обмен-доля. Окончательное значение я фиксирую с помощью sysctl в файле /etc/sysctl.d/ и слежу за тем, чтобы изменения были прозрачными. Параллельно я забочусь о правильной настройке раздела подкачки: подходящий размер, быстрый носитель, разумные приоритеты. Что касается нагрузки на память, я дополнительно обращаю внимание на кэш страниц и его поведение; хороший вводный материал дает этот обзор по Вытеснение из кэша страниц, который помогает мне в анализе причин и Контекст . Благодаря такому подходу я обеспечиваю стабильное время отклика, предотвращаю пиковые нагрузки на кэш и эффективно использую имеющуюся оперативную память.

Текущие статьи

Сервер хостинга Linux с оптимизированным объемом оперативной памяти и настройкой параметра swappiness в центре обработки данных
Серверы и виртуальные машины

Правильная настройка параметра vm.swappiness для обеспечения оптимальной производительности сервера

Узнайте, как целенаправленно оптимизировать параметр vm.swappiness для вашего хостинг-сервера под Linux и значительно повысить производительность сервера с помощью правильной настройки файла подкачки в Linux.

Сервер Linux в центре обработки данных с виртуализированными потоками памяти и данных для оптимизации производительности записи
Серверы и виртуальные машины

Коэффициент «Dirty Ratio» и «Dirty Background Ratio» в Linux: точная настройка для оптимальной производительности записи

Узнайте, как с помощью параметров «linux dirty ratio» и «dirty background ratio» целенаправленно оптимизировать производительность записи и производительность ядра вашего сервера, а также эффективно управлять «грязными» страницами.

Современный центр обработки данных с серверными стойками и цифровой инфраструктурой
Новости хостинга

Тенденции в сфере хостинга на 2026 год: какие технологии провайдеры внедряют уже сейчас

Обзор тенденций в сфере хостинга на 2026 год: искусственный интеллект, пограничные вычисления, безопасность и автоматизация определяют современные предложения в сфере хостинга.