如果 /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)
您可能应该检查投票最高的答案 ServerFault SE默认的 ulimit 值在哪里设置?(Linux、centos) 。
更新: 按照建议,复制/粘贴来自其他站点的信息:
这些“默认”限制由以下人员应用:
init
fork(2)
),setrlimit(2)
。普通用户的进程不能提高硬限制。
在启动时,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:
Run Code Online (Sandbox Code Playgroud)case RLIMIT_NOFILE: pl->limits[i].limit.rlim_cur = 1024; pl->limits[i].limit.rlim_max = 1024;
因此,请检查 CentOS 的 PAM 模块源代码(查找 RLIMIT_NPROC)。
但是,请注意,许多进程不会通过 PAM(通常,如果它们不是由登录用户启动,例如守护进程,也可能是 cron 作业)。