В условиях высоких сетевых нагрузок стандартных настроек ядра и драйверов NIC часто недостаточно: возникают «пропуска» пакетов, увеличивается задержка и теряется пропускная способность. Ниже — практическое руководство по тонкой настройке с помощью
ethtool и sysctl на Debian/Ubuntu (или производных).1. Аудит текущих параметров
Проверяем значения кольцевых буферов (RX/TX):
sudo ethtool -g eth0
Показывает текущие размеры ring-буферов:
rx, tx, rx-mini, rx-jumbo и т.д.Смотрим текущие sysctl-параметры сетевого стека:
sysctl net.core.rmem_max net.core.wmem_max \
net.ipv4.tcp_rmem net.ipv4.tcp_wmem net.ipv4.tcp_congestion_control
2. Увеличиваем буферы NIC
1. Подбираем оптимальные значения.
Обычно в нагрузочных дата-центрах достаточно:
sudo ethtool -G eth0 rx 4096 tx 4096
*
rx 4096 — кольцевой буфер для приёма пакетов.*
tx 4096 — кольцевой буфер для передачи.> Когда применять: На серверах с большой пропускной способностью (>1 Gbps) и высокой маллатентностью сети.
2. Проверяем после изменения:
ethtool -g eth0
Убедитесь, что значения приняты драйвером.
3. Настройка параметров ядра (sysctl)
Добавьте в
/etc/sysctl.d/99-network-tuning.conf:
# Увеличиваем максимальные размеры буферов ядра
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# Стандартизованные границы TCP-буферов (min/default/max)
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# Увеличиваем очередь для входящих соединений
net.core.netdev_max_backlog = 5000
# Активация TCP-Congestion Control: BBR (если ядро поддерживает)
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_mtu_probing = 1
*
rmem_max/wmem_max задают максимальный объём памяти, выделяемой ядром под сетевые буферы.*
tcp_rmem/tcp_wmem определяют минимум/дефолт/максимум для динамического буфера TCP-соединения.*
netdev_max_backlog увеличивает очередь пакетов, ожидающих обработки kernel-space до userspace.* BBR снижает задержки и повышает пропускную способность в условиях загруженных сетей.
Применяем:
sudo sysctl --system
4. Проверка и валидация
Мониторим показатели через
ss или netstat:
ss -s
Смотрим на количество ошибок, состояние TCP-сокетов, очереди.
* Измеряем пропускную способность:
iperf3 -c <сервер> -P 4 -t 60
Сравниваем до и после настроек.
5. Зачем и когда применять
* Виртуальные машины/контейнеры с «тонкой» сетью: при «подёргиваниях» в трафике (bursty traffic).
* Серверы игр/стриминга/СХД: где важна низкая задержка и высокая стабильность.
* Сервисы с пиковыми нагрузками (backup, CDN-ноды): помогут снизить потерю пакетов при пиках.
6. Полезный трюк и предостережение
* Трюк:
Чтобы изменения NIC-буферов применялись автоматически при перезагрузке, создайте udev-правило
/etc/udev/rules.d/70-ethtool.rules:
ACTION=="add", SUBSYSTEM=="net", NAME=="eth0", RUN+="/usr/sbin/ethtool -G eth0 rx 4096 tx 4096"
* Предупреждение:
На VDS с ограниченной памятью чрезмерное увеличение буферов может привести к OOM-ситуациям. Всегда мониторьте нагрузку на RAM и swap.
Вывод
С помощью правильной комбинации
ethtool + sysctl можно значительно улучшить сетевые метрики: снизить пинг, уменьшить потерю пакетов и увеличить throughput.👉 Сохрани, пригодится!
#Linux@linux_odmin #LinuxTips@linux_odmin #Команды@linux_odmin
👉 @linux_odmin