Назад | Перейти на главную страницу

Увеличить лимит открытых файлов службы systemd

У меня systemd работает внутри контейнера докеров, и я пытаюсь установить ограничение количества файловых дескрипторов для службы. Я установил ограничение для контейнера докеров на 262 КБ, но по какой-то причине процесс / sbin / init снижает предел до 65 КБ. Вот простой пример:

$ sudo docker run --rm --ulimit nofile=262144:262144 --entrypoint grep centos:7.6.1810 files /proc/1/limits
Max open files            262144               262144               files
$ sudo docker run -d --name test --ulimit nofile=26144:26144 --entrypoint /sbin/init centos:7.6.1810 && sudo docker exec test grep files /proc/1/limits && sudo docker rm -f test
cd9bbe479f4a5b5b4e78421bfc8ef968e5abd5d9703b7f1f1975998e65ab0145
Max open files            26144                26144                files
test
$ sudo docker run -d --name test --ulimit nofile=262144:262144 --entrypoint /sbin/init centos:7.6.1810 && sudo docker exec test grep files /proc/1/limits && sudo docker rm -f test
d5d115a0cc07994b9934a809ac567e3f75994f75e56f88740ccc8f08bcb15d1e
Max open files            65536                65536                files     
test

В первой команде я запускаю простую команду grep, вы можете видеть, что она получает ограничение в 262 КБ, которое я установил для контейнера. Вторая команда Я запускаю процесс / sbin / init с лимитом 26 КБ, которому он следует. Если я устанавливаю предел> 65k (3-я команда), он игнорируется и вместо этого устанавливается значение 65k.

Поскольку процесс init является родительским для всех служб и устанавливает жесткое ограничение nofile равным 65 КБ, моя служба не может выйти за пределы 65 КБ (например, с параметром LimitNOFILE = для службы). Есть ли способ запретить init устанавливать более низкий предел nofile?

EDIT: третья команда дает ожидаемый результат на моей машине. Вышеуказанные выходные данные получены из экземпляра AWS EC2. Не уверен, почему это другое ...

Это работает, как ожидалось, с centos:7.7.1908 image, поэтому я думаю, что что-то было исправлено в systemd.