# sysctl - крутилки ядра _Команды · LinuxLab Knowledge Base_ **TL;DR:** `sysctl` читает и пишет параметры ядра через виртуальную FS `/proc/sys/`. Tuning сети, памяти, файлсистемы - всё через эти ручки. ## Где живут параметры Каждый параметр - это файл под `/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. ## Базовые команды ```bash 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` живёт до ребута. Чтобы навсегда: ```bash 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](/kb/ip-forwarding.md)) - **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 перед изменениями ```bash sysctl -a > /tmp/sysctl-backup-$(date +%F).txt 2>/dev/null ``` Когда что-то сломалось от tuning'а - сравни `diff` со snapshot'ом. ## Команды ```bash sysctl -a 2>/dev/null | grep tcp_congestion ``` Найти параметры по теме (тут - TCP congestion control) ```bash sudo sysctl -w net.ipv4.ip_forward=1 ``` Включить IP-форвардинг (превратить хост в роутер); до ребута ```bash sudo sysctl --system ``` Перечитать все /etc/sysctl.d/*.conf после правки ```bash cat /proc/sys/net/ipv4/tcp_keepalive_time ``` Прямое чтение через /proc - то же что sysctl, без бинаря ```bash sudo sysctl -p /etc/sysctl.d/99-mytuning.conf ``` Применить конкретный конфиг-файл ## См. также - [TCP states (LISTEN, ESTABLISHED, TIME_WAIT)](/kb/tcp-states.md) - [TCP three-way handshake](/kb/tcp-handshake.md) - [IP forwarding - превратить хост в роутер](/kb/ip-forwarding.md) - [Kernel modules - LKM, modprobe, signing, DKMS](/kb/kernel-modules.md)