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

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

如果 /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        

答案1

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

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

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

  • Linux内核开机时间(对于init过程),
  • 遗产,来自父进程的限制(有时fork(2)),
  • 聚丙烯酰胺 当用户会话打开时(可以替换内核/继承值),
  • 过程本身(可以替换 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

对于 x86 架构(至少),但发行版有时会更改默认内核值,因此检查你的内核源代码为了kernel/fork.cfork_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;

所以,检查 CentOS 的 PAM 模块源代码(查找 RLIMIT_NPROC)。

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

相关内容