从 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
当然,这些值仅作为示例,您可以用您的用户替换星号。