Где живут параметры
Каждый параметр - это файл под /proc/sys/:
/proc/sys/net/ipv4/ip_forward ↔ net.ipv4.ip_forward
/proc/sys/net/ipv4/tcp_congestion_control ↔ net.ipv4.tcp_congestion_control
/proc/sys/vm/swappiness ↔ vm.swappiness
/proc/sys/kernel/pid_max ↔ kernel.pid_max
Точки в sysctl-имени = слэши в пути. Чтение/запись файла = вызов sysctl.
Базовые команды
sysctl -a # все параметры (тысячи)
sysctl -a 2>/dev/null | grep ^net.ipv4.tcp # фильтр по подсистеме
sysctl net.ipv4.ip_forward # прочитать один
sysctl -n net.ipv4.ip_forward # -n: только значение, без имени
sudo sysctl -w net.ipv4.ip_forward=1 # установить (до ребута)
Постоянная фиксация
-w живёт до ребута. Чтобы навсегда:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-router.conf
sudo sysctl --system # применить все .conf-файлы прямо сейчас
Файлы в /etc/sysctl.d/ читаются в лексикографическом порядке -
префикс с числом (99- или 10-) задаёт приоритет.
Самые ходовые подсистемы
- net.ipv4.tcp_* - все TCP-tunables (congestion control, keepalive, окна)
- net.ipv4.ip_forward - превратить машину в роутер (ip-forwarding)
- net.core.* - общесетевые буферы, qdisc-defaults
- net.netfilter.nf_conntrack_max - размер таблицы connection tracking
- vm.swappiness - насколько агрессивно ядро уходит в swap (0-100)
- vm.overcommit_memory - стратегия overcommit'а памяти
- fs.file-max - глобальный лимит открытых fd
- kernel.pid_max - максимальный PID (по умолчанию 32768 или 4M)
Внутри контейнера
В Docker /proc/sys смонтирован read-only. sysctl -w упадёт с EPERM,
если контейнер не запущен с --privileged или нужным capability
(SYS_ADMIN + правильный mount). Часть параметров считается per-namespace
(network sysctls), часть - глобальные (на хосте всё, контейнеру не дают).
Backup перед изменениями
sysctl -a > /tmp/sysctl-backup-$(date +%F).txt 2>/dev/null
Когда что-то сломалось от tuning'а - сравни diff со snapshot'ом.