如果 /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.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;
所以,检查 CentOS 的 PAM 模块源代码(查找 RLIMIT_NPROC)。
但是,请注意,许多进程不会通过 PAM(通常,如果它们不是由登录用户启动,例如守护进程,也可能是 cron 作业)。