systemd-sysctl: Couldn't write sysctl setting
Настройки ядра применяются при загрузке отдельной службой. Её тихий отказ означает, что система работает с настройками по умолчанию, а не с вашими — и обнаруживается это обычно под нагрузкой, когда пределы оказываются не теми.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Параметра нет в этом ядре
Часть параметров появляется и исчезает между версиями ядра. Попытка записи в отсутствующий параметр отказывает.
-
Модуль, создающий параметр, не загружен
Параметры подсистем появляются вместе с модулями. При применении настроек до загрузки модуля параметра ещё нет.
-
Настройка переопределена другим файлом
Описания читаются из нескольких каталогов по приоритету. Ваше значение может быть перекрыто.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Какие настройки ядра не применились.
journalctl -u systemd-sysctl -b --no-pagerИтоговый набор настроек со всеми переопределениями.
sudo systemd-analyze cat-config sysctl.d | head -40Применение настроек вручную с выводом ошибок.
sudo sysctl --system 2>&1 | tail -20Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Часть параметров появляется и исчезает между версиями ядра. Попытка записи в отсутствующий параметр отказывает.
- Как проверить
-
Посмотрите сообщение и наличие параметра.
journalctl -u systemd-sysctl -b --no-pager | tail -10 sysctl net.ipv4.tcp_tw_recycle 2>&1 | head -2
- Как исправить
- Уберите устаревший параметр из описаний. Список доступных параметров зависит от версии и сборки ядра.
- Почему происходит
- Параметры подсистем появляются вместе с модулями. При применении настроек до загрузки модуля параметра ещё нет.
- Как проверить
-
Посмотрите модуль и параметр.
lsmod | grep -w nf_conntrack; sysctl net.netfilter.nf_conntrack_max 2>&1 | head -2
- Как исправить
- Обеспечьте загрузку модуля до применения настроек через описание загрузки модулей. Тогда параметр будет существовать к нужному моменту.
- Почему происходит
- Описания читаются из нескольких каталогов по приоритету. Ваше значение может быть перекрыто.
- Как проверить
-
Посмотрите итоговый набор и источник значения.
sudo systemd-analyze cat-config sysctl.d 2>/dev/null | grep -n "somaxconn" sysctl net.core.somaxconn
- Как исправить
- Задайте значение файлом с большим приоритетом в каталоге настроек администратора и проверьте итоговое значение после загрузки.
Пример вывода
Параметра нет в текущем ядре. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd-sysctl[620]: Couldn't write '1' to 'net/ipv4/tcp_tw_recycle', ignoring: No such file or directory
systemd-sysctl[620]: Couldn't write '65535' to 'net/netfilter/nf_conntrack_max', ignoring: No such file or directory
systemd[1]: Finished systemd-sysctl.service - Apply Kernel Variables.
Связанные ошибки
- nf_conntrack: table full, dropping packet Соединения обрываются под нагрузкой: заполнена таблица отслеживания соединений ядра.
- VFS: file-max limit reached: в системе кончились описатели Общесистемный предел числа открытых файлов исчерпан: службы перестают принимать соединения и открывать файлы.
- systemd-modules-load: модуль не загружается при загрузке системы Служба загрузки модулей завершается с ошибкой: модуля нет, он встроен в ядро или заблокирован.
- Обновление микрокода процессора не загружено В журнале ядра нет записи о загрузке микрокода: пакет не установлен или образ начальной загрузки не обновлён.
- A start job is running: загрузка висит на одной службе Загрузка останавливается с обратным отсчётом: служба не укладывается в таймаут. Как найти виновника и не ждать.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Dependency failed for … и результат 'dependency' Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- Elasticsearch: max virtual memory areas vm.max_map_count is too low Elasticsearch отказывается стартовать из-за заниженного vm.max_map_count. Как поднять значение и закрепить его.
Источники
-
systemd-sysctl.service(8)
Применение настроек ядра при загрузке. -
sysctl.d(5)
Каталоги описаний и их приоритет. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено описанием с устаревшим параметром ядра.