Linux: Тюнинг системы, настройка sysctl, swappiness и файловых систем

Администраторы серверов на Linux часто сталкиваются с ситуацией, когда стандартные настройки операционной системы не раскрывают весь потенциал аппаратного обеспечения. Базовая установка ОС ориентирована на универсальность и совместимость, но для решения конкретных задач — будь то веб-хостинг, база данных или файловое хранилище — требуется тонкая настройка. Этот процесс, известный как «тюнинг» (от англ. tuning), позволяет значительно повысить производительность, стабильность и эффективность использования ресурсов.

Данная информация предназначена для услуг: VPS хостинг или Облачный хостинг

Настройка ядра Linux с помощью sysctl

sysctl — это утилита, позволяющая в реальном времени изменять параметры ядра Linux. Эти параметры доступны через псевдо-файловую систему /proc/sys/. Постоянные настройки сохраняются в файле /etc/sysctl.conf или в отдельных файлах внутри директории /etc/sysctl.d/, которые применяются при загрузке системы.

Перед любыми изменениями создайте резервную копию:

sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup

 

1.1. Оптимизация сетевых параметров

Сетевые настройки критически важны для веб-серверов и серверов приложений.

  • Увеличение числа максимальных соединений (для высоконагруженных веб-серверов):

    # Увеличиваем диапазон локальных портов для исходящих подключений
    net.ipv4.ip_local_port_range = 1024 65535
    # Увеличиваем максимальный размер буфера для очереди принятых соединений (backlog)
    net.core.somaxconn = 32768
    # Увеличиваем максимальное количество открытых файлов (сокетов)
    fs.file-max = 1000000

     
     
  • Ускорение обработки сетевого трафика:

    # Включаем оптимизацию для высокоскоростных сетевых подключений (увеличиваем размеры буферов)
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    # Включаем TCP Window Scaling для более эффективного использования широких каналов
    net.ipv4.tcp_window_scaling = 1
    # Включаем алгоритм TCP BBR для улучшения пропускной способности и уменьшения задержки (в современных ядрах)
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr

  • Безопасность и обход ограничений:

    # Защита от SYN-flood атак
    net.ipv4.tcp_syncookies = 1
    # Не принимаем пакеты с маршрутизацией в исходном заголовке (Source Routing)
    net.ipv4.conf.all.accept_source_route = 0
    # Включаем защиту от IP-спуфинга
    net.ipv4.conf.all.rp_filter = 1

     
     

1.2. Оптимизация работы с памятью и виртуальной памятью

Эти параметры влияют на то, как ядро управляет оперативной и виртуальной памятью.

  • Снижение нагрузки на свопинг:

    # Значение, определяющее склонность ядра к свапированию, подробнее в следующей главе
    vm.swappiness = 10
    # Процент памяти, при достижении которого ядро начнет активно освобождать кэш
    vm.vfs_cache_pressure = 50
    # Процент памяти, при достижении которого ядро попытается записать данные из dirty-буферов на диск
    vm.dirty_ratio = 20
    # Процент памяти, при котором процессы начинают принудительно записывать dirty-данные
    vm.dirty_background_ratio = 10

     
     

Как применить изменения:

# Для применения изменений из всех конфигурационных файлов
sudo sysctl -p
# Или укажите конкретный файл
sudo sysctl -p /etc/sysctl.d/99-custom.conf

 
 

Важно! Не применяйте все настройки слепо. Мониторьте производительность до и после изменений с помощью утилит tophtopvmstatssnetstat. Настройки сильно зависят от объема доступной RAM, типа нагрузки и конкретного сервиса.

Swappiness — управление поведением виртуальной памяти

2.1. Что такое Swappiness?

vm.swappiness — это параметр ядра в диапазоне от 0 до 100, который контролирует относительную склонность ядра к перемещению страниц памяти из оперативной памяти (RAM) в пространство подкачки (swap).

  • Значение near 100: Ядро будет активно переносить неактивные страницы памяти в swap, чтобы максимально освободить оперативную память для кэширования файлов. Это может быть полезно для файловых серверов, но вредно для серверов приложений.

  • Значение near 0: Ядро будет избегать использования swap до последнего, пока не исчерпается свободная оперативная память. Это предпочтительная настройка для серверов с большим объемом RAM, где важно избегать задержек, связанных с дисковыми операциями.

2.2. Как выбрать правильное значение?

  • Серверы с большим объемом RAM (16ГБ+), БД (MySQL, PostgreSQL), кэши (Redis, Memcached):
    Установите низкое значение (1-10). Цель — использовать swap только в крайних случаях, чтобы избежать полного исчерпания памяти (OOM-Killer), но при этом не замедлять работу дисковыми операциями. Для серверов с десятками гигабайт RAM часто ставят 1.

  • Веб-серверы (Nginx, Apache) со средним объемом RAM (2-8ГБ):
    Установите среднее значение (30-50). Это позволяет эффективно кэшировать статику, но при этом не допускать полного забивания RAM.

  • Десктопы или системы с малым объемом RAM (<2ГБ):
    Можно оставить значение по умолчанию (60). Это помогает избежать полного зависания системы при нехватке памяти.

  • Серверы, где swap на SSD-диске:
    Можно использовать чуть более высокое значение, так как скорость SSD снижает негативный эффект от свопинга, но все равно рекомендуется придерживаться низких значений (10-30) для производительности.

2.3. Как проверить и изменить swappiness?

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

cat /proc/sys/vm/swappiness
# или
sysctl vm.swappiness

 
 

Изменить значение на лету (до перезагрузки):

sudo sysctl vm.swappiness=10

 
 

Для постоянного изменения добавьте строку в файл /etc/sysctl.conf или /etc/sysctl.d/99-custom.conf:

vm.swappiness = 10

 
 

И примените настройки: sudo sysctl -p.

2.4. Мониторинг использования swap

Используйте утилиты free -hhtop или vmstat 2 для наблюдения за использованием swap в реальном времени.

$ vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b     swpd free    buff cache   si so     bi bo       in  cs     us sy id wa st
1 0        0 1970248 2088 2169364 0  0      4  25       114 36     4  5  91 0  0

 
 

Обращайте внимание на столбцы si (swap in) и so (swap out). Если в них постоянно есть большие значения — это признак нехватки оперативной памяти, и низкий swappiness лишь маскирует проблему. В таком случае лучше всего увеличить объем RAM.

Настройка файловых систем

Выбор файловой системы (ФС) и ее параметров монтирования напрямую влияет на скорость чтения/записи, целостность данных и потребление ресурсов.

3.1. Сравнение ext4 и XFS

  • ext4 (Fourth Extended Filesystem):

    • Плюсы: Надежная, стабильная, проверенная временем. Отличная производительность с большим количеством мелких файлов. Хорошие возможности журналирования. Де-факто стандарт для многих дистрибутивов.

    • Минусы: Производительность может деградировать при фрагментации или работе с очень большими (терабайтными) файлами. Процесс проверки (fsck) на больших разделах может занимать очень много времени.

    • Идеально для: Системных разделов (/boot, /), серверов с большим количеством мелких файлов (кэши, почта, исходный код).

  • XFS:

    • Плюсы: Выдающаяся производительность с большими файлами (видео, базы данных, логи). Высокая масштабируемость и скорость работы на многопроцессорных системах. Быстрая проверка целостности (fsck почти не требуется).

    • Минусы: Менее эффективна с огромным количеством мелких файлов. Сложность восстановления данных в случае сбоя. Исторически была рискованной с точки зрения метаданных, но в современных ядрах это редкость.

    • Идеально для: Разделов с большими файлами (/home, /var/lib/mysql, /var/log), медиа-хранилищ, выделенных серверов баз данных.

3.2. Ключевые параметры монтирования в /etc/fstab

Вне зависимости от выбора ФС, правильные опции монтирования в файле /etc/fstab дают immediate-прирост производительности.

Пример настройки для SSD/NVMe дисков (ext4):

UUID=ваш-uuid-диска / ext4 defaults,noatime,nodiratime,discard,errors=remount-ro 0 1

 
  • noatime и nodiratime (или просто noatime, что подразумевает и nodiratime) — КРИТИЧЕСКИ ВАЖНО. Эти опции отключают запись времени последнего доступа к файлу (atime). Это убирает множество лишних операций записи на диск, значительно повышая производительность, особенно для операций чтения. Без этих опций любое обращение к файлу приводит к записи метаданных.

  • discard — включает поддержку TRIM для SSD-дисков. Это помогает поддерживать производительность SSD на высоком уровне в долгосрочной перспективе, позволяя диску заранее очищать неиспользуемые блоки. Альтернатива — периодический запуск fstrim по cron, что часто считается более эффективным.

  • errors=remount-ro — перемонтирует раздел в режим только для чтения в случае ошибки, что безопаснее, чем продолжать работу.

Дополнительные опции для производительности:

  • data=writeback (для ext4) — менее строгий режим журналирования, который журналирует только метаданные, а не сами данные. Это может дать прирост скорости, но теоретически повышает риск потери данных в случае сбоя питания (повреждаются только данные, которые не были сброшены на диск в момент сбоя). Используйте с осторожностью.

  • commit=60 — задает интервал в секундах, через который метаданные журнала будут принудительно сбрасываться на диск. Увеличение этого значения (например, со стандартных 5 до 60) может уменьшить нагрузку на диск при интенсивной работе с файлами, но увеличивает окно возможной потери данных.

Пример настройки для XFS:

UUID=ваш-uuid-диска /var/lib/mysql xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 2

 
  • logbufs=8 и logbsize=256k — увеличение количества и размера буферов журнала XFS может значительно повысить производительность при интенсивной записи.

3.3. Утилиты для тестирования и мониторинга

  • Тестирование скорости диска: fiohdparm -Tt /dev/sdXdd (с осторожностью, часто дает неточные результаты).

  • Мониторинг использования диска: df -hiotopiostat -dx 2.

Заключение и рекомендации

Тюнинг Linux — это не разовая акция, а непрерывный процесс, основанный на измерении, анализе и эксперименте.

  1. Не навреди. Всегда вносите изменения по одному, тестируйте и отслеживайте результат. Резкие изменения десятка параметров одновременно не позволят понять, что именно помогло или навредило.

  2. Бэкап — наше все. Перед изменением любых критических настроек создавайте резервные копии конфигурационных файлов и убедитесь, что у вас есть доступ к серверу через IPMI/KVM/VM-console на случай, если ошибка приведет к потере сетевой доступности.

  3. Измеряйте все. Используйте инструменты мониторинга (например, Prometheus + Grafana) для сбора данных о производительности до и после внедрения изменений. Только объективные цифры могут подтвердить эффективность тюнинга.

  4. Учитывайте нагрузку. Настройки для файлового сервера и для in-memory базы данных кардинально отличаются. Анализируйте профиль нагрузки вашего сервиса.

  5. Аппаратное обеспечение — основа. Самый лучший тюнинг ПО не поможет, если проблема в медленных дисках (HDD), недостатке RAM или слабом процессоре. Сначала убедитесь, что аппаратная часть адекватна задачам.

Применяя изложенные в этой статье принципы настройки sysctl, управления swappiness и выбора параметров файловых систем, вы сможете выжать из своего Linux-сервера максимум производительности, стабильности и отказоустойчивости.

  • 0 Пользователи нашли это полезным

Помог ли вам данный ответ?

Ищете что-то другое?

mhost.by