我有一个带有 set 的 systemd 用户服务LimitNOFILE
。该值一直受到尊重,直到达到 4096。在那之后,它的上限为 4096。我也尝试过DefaultLimitNOFILE
增加/etc/systemd/user.conf
.
它在 limit.conf 中设置正确,适用于开箱即用的新 shell。不过,我听说 systemd 并不关心该文件。可能是什么问题呢?
答案1
迟到的答复;
limits.conf
当 systemd 运行时不使用(limits.conf
适用于非 systemd 系统)。
您真正想要的文件是;/etc/systemd/system.conf
- 这是全局配置。然后你就可以/etc/systemd/user.conf
- 这指定了进一步的每用户限制。
具体针对您的情况;即使您配置了user.conf
更高的限制,这也是无效的,因为 in 的限制system.conf
较低,并且充当 in 的限制上限user.conf
奥_奥
答案2
从man systemd.exec
:
对于系统单元,可以自由选择这些资源限制。然而,对于用户单元(即由 systemd(1) 的每用户实例运行的单元),这些限制受到操作系统强制执行的(可能更具限制性)每用户限制的约束。
您的系统可能配置了每个进程 4096 个打开文件的硬限制。如果 systemd 允许你绕过这个限制,就会出现一个漏洞。
答案3
这可能与 240 版本之前的 systemd 有关:
看:https://github.com/systemd/systemd/blob/main/NEWS
240 的变化:...
- Linux 内核当前对用户空间进程的默认 RLIMIT_NOFILE 资源限制设置为 1024(软)和 4096(硬)。以前,systemd 将其未经修改地传递给它分叉的所有进程。在此 systemd 版本中,systemd 传递的硬限制增加到 512K,覆盖内核的默认设置,并大幅增加非特权用户空间进程可以分配的并发文件描述符的数量...
所以尝试将你的systemd升级到版本240或更高版本