增加 systemd 服务的打开文件限制

增加 systemd 服务的打开文件限制

我在 docker 容器内运行 systemd,并尝试为该服务设置文件描述符数量限制。我将 docker 容器的限制设置为 262k,但由于某种原因,/sbin/init 进程将限制降低到 65k。以下是一个简单的示例:

$ 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 命令,您可以看到它获得了我在容器上设置的 262k 限制。第二个命令我以 26k 限制启动 /sbin/init 进程,然后它继续执行。如果我将限制设置为 >65k(第三个命令),它将被忽略并改为设置为 65k。

由于 init 进程是所有服务的父进程,并且它将 nofile 硬限制设置为 65k,因此我的服务不可能超过 65k(例如,在服务上设置 LimitNOFILE=)。有没有办法阻止 init 设置较低的 nofile 限制?

编辑:第三个命令在我的机器上给出了预期的输出。上面的输出来自 AWS EC2 实例。不确定为什么它不同...

答案1

这与centos:7.7.1908图像预期的那样工作,所以我猜测 systemd 中已经修复了某些问题。

相关内容