在未修改的环境中设置的限制

use*_*849 6 linux ulimit

如果 /etc/security/limits.conf 尚未编辑或更改,则只有注释。然而,'cat /proc/self/limits' 显示存在一些有效的限制。这些是编译进内核的吗?如果没有,系统从哪里获得未修改环境中的初始默认限制?

[~]$ cat /proc/self/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            10485760             unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             1024                 60413                processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       60413                60413                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        
Run Code Online (Sandbox Code Playgroud)

Pet*_*vic 2

您可能应该检查投票最高的答案 ServerFault SE默认的 ulimit 值在哪里设置?(Linux、centos)

更新: 按照建议,复制/粘贴来自其他站点的信息:

这些“默认”限制由以下人员应用:

  • 启动时Linux 内核(到进程),init
  • 继承,来自父进程的限制(有时fork(2)),
  • 用户会话打开时的PAM(可以替换内核/继承值),
  • 进程本身(可以替换 PAM 和内核/继承值,请参阅setrlimit(2)

普通用户的进程不能提高硬限制。

Linux 内核

在启动时,Linux 为init进程设置默认限制,然后由所有其他(子)进程继承。要查看此限制:grep process /proc/1/limits.

例如,内核默认的最大文件描述符数( ulimit -n) 是 1024/1024(软、硬),在 Linux 2.6.39 中已提高到 1024/4096。

您所讨论的默认最大进程数大约限制为

Total RAM in kB / 128
Run Code Online (Sandbox Code Playgroud)

对于 x86 架构(至少),但发行版有时会更改默认内核值,因此请检查您的内核源代码中的kernel/fork.c, fork_init()。“进程数”限制称为 RLIMIT_NPROC。

聚丙烯酰胺

通常,为了确保登录时的用户身份验证,PAM 与一些模块一起使用(请参阅 参考资料/etc/pam.d/login)。

在 Debian 上,负责设置限制的 PAM 模块位于:/lib/security/pam_limits.so

limits.conf该库将从和读取其配置limits.d/*.conf,但即使这些文件为空,pam_limits.so 也可能使用您可以在源代码中检查的硬编码值。

例如,在 Debian 上,库已被修补,默认情况下,最大进程数( nproc) 不受限制,最大文件数( nofile) 为 1024/1024:

  case RLIMIT_NOFILE:
      pl->limits[i].limit.rlim_cur = 1024;
      pl->limits[i].limit.rlim_max = 1024;
Run Code Online (Sandbox Code Playgroud)

因此,请检查 CentOS 的 PAM 模块源代码(查找 RLIMIT_NPROC)。

但是,请注意,许多进程不会通过 PAM(通常,如果它们不是由登录用户启动,例如守护进程,也可能是 cron 作业)。