linux-labs

Вики / Загрузка

sysctl (параметры ядра)

Чтение и настройка параметров ядра во время работы и постоянно (sysctl.conf).

sysctl читает и меняет параметры ядра на лету (через /proc/sys). Частые задачи: включить форвардинг пакетов, подкрутить сеть/память, лимиты inotify, поведение swap.

sysctl -a                         # все параметры (их тысячи)
sysctl -a 2>/dev/null | grep forward   # поиск нужного
sysctl net.ipv4.ip_forward        # один параметр
sysctl vm.swappiness
sudo sysctl -w net.ipv4.ip_forward=1     # временно (до ребута)
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward   # то же напрямую

# постоянно — файл в /etc/sysctl.d/ (имя с цифрой задаёт порядок):
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-forward.conf
sudo sysctl --system              # применить ВСЕ *.conf (с учётом порядка)
sudo sysctl -p /etc/sysctl.d/99-forward.conf   # применить конкретный файл

Порядок: файлы из /usr/lib, /run, /etc/sysctl.d сливаются по имени; больший номер перекрывает. /etc/sysctl.conf применяется тоже.

Параметр Зачем
net.ipv4.ip_forward маршрутизация/NAT, контейнеры
vm.swappiness склонность к swap (см. memory-swap)
vm.max_map_count требуется Elasticsearch и др. (262144)
fs.inotify.max_user_watches «too many open files» у watcher'ов (IDE, tail)
fs.file-max глобальный лимит открытых файлов (см. ulimit)
net.core.somaxconn длина очереди соединений (нагруженный веб)
net.ipv4.tcp_tw_reuse переиспользовать TIME-WAIT-сокеты
net.ipv4.conf.all.rp_filter проверка обратного пути (асимметричный роутинг)
kernel.panic секунды до авто-ребута после паники

Поменял через -w, после ребута сбросилось

sysctl -w временный. Для постоянства — файл в /etc/sysctl.d/*.conf + sysctl --system.

Файл в sysctl.d не применяется

Проверь имя (должно .conf), порядок (другой файл с большим номером перекрывает), ошибки: sudo sysctl --system печатает проблемные строки. Параметр может требовать модуль (см. kernel-modules).

Форвардинг включил, а пакеты не идут

Кроме ip_forward=1 нужны правила файрвола/NAT и маршруты (ip).

Параметр «read-only» / sysctl: cannot stat

Часть параметров задаётся только при загрузке (kernel cmdline) или появляется лишь после загрузки модуля (например, net.netfilter.* — после nf_conntrack).

inotify «No space left»/«too many watches»

Не диск, а лимит: fs.inotify.max_user_watches мал. Подними в /etc/sysctl.d/.

sysctl ПАРАМЕТР                   # прочитать
sudo sysctl -w ПАРАМЕТР=ЗНАЧ      # временно
echo 'param=val' | sudo tee /etc/sysctl.d/99-x.conf ; sudo sysctl --system   # постоянно
sysctl net.ipv4.ip_forward ; sysctl vm.swappiness ; sysctl fs.inotify.max_user_watches

См. также