从启动/初始化中删除 ulimit

从启动/初始化中删除 ulimit

从 CentOs 6 开始,每个用户的默认进程限制为 1024,即 /etc/security/limits.d/90-nproc.conf

*          soft    nproc   1024

我必须执行后端服务/守护程序“myservice”,这需要更大的进程限制值。因此,我必须覆盖预配置的限制 (1024)。为此,我尝试为 root 和 myuser(运行 myservice 的用户)创建单独的条目。

myuser          soft    nproc   5000
root            soft    nproc   5000

进而

service myservice restart

现在限制增加了,看来问题已经解决了!但这只是暂时的,系统重启后限制又回到了 1024。(笔记:myservice 配置为在启动时启动)

看来这是由于 init 进程负责启动系统上的每个服务而发生的,因此“myserivce”作为子进程继承了父进程的限制(init 默认有 1024 的限制)。

我搜索了一下是否有办法增加 init 的限制,但没找到!我尝试修改 /etc/security/limits.d/90-nproc.conf

*          soft    nproc   5000

但还是一样,重启后 init 仍然有 1024 的限制,myservice 也有 1024 的限制

笔记:如果我从 shell 提示符重新启动 myservice,那么它会得到接受的限制(5000),但我想在每次重新启动后自动启动它。

有人可以指导我,如何增加“myservice”的进程限制,并在重启后保留它?

答案1

我认为您的问题可能是双重的。您似乎只增加了软限制,而没有增加硬限制。如果硬限制默认值低于定义的软限制,我认为您将继续受到较低值的限制。

此外,这些是每个用户的限制,但不一定是内核的系统范围配置限制。您可能需要使用适当的 sysctl 命令设置该值。(使其在 中持久化/etc/sysctl.conf。)

例如,这将设置内核的文件描述符的最大值。(内核跟踪打开文件的进程,因此这个相同的键与两个 ulimit 值相关。)

sysctl -w fs.file-max=10000

(我认为,由于省略了这一部分,所以这很可能是您当前配置中缺乏持久性的部分。)

然后,您可以在中设置每个用户的限制/etc/security/limits.conf

* soft nofile 2500
* hard nofile 5000

/etc/security/limits.d/90-nproc.conf

* soft nproc 2500
* hard nproc 5000

当然,这些值仅作为示例,您可以用您的用户替换星号。

相关内容