我有两个几乎相同规格的CentOS 5服务器。 当我login并做ulimit -u
,在一台机器上我得到unlimited
,另一个我得到77824
。
当我运行一个cron时:
* * * * * ulimit -u > ulimit.txt
我得到相同的结果( unlimited
, 77824
)。
我试图确定这些设置在哪里,以便我可以改变它们。 他们没有设置在我的任何configuration文件( .bashrc
, /etc/profile
等)。 这些不会影响cron),也不会在/etc/security/limits.conf
(这是空的)。
我已经search谷歌,甚至已经做了grep -Ir 77824 /
,但迄今为止没有出现。 我不明白这些机器如何预设不同的限制。
其实我并不是想知道这些机器,而是一个不同的(CentOS 6)机器,它的极限是1024
,而这个机器太小了。 我需要运行具有更高限制的cron作业,而且我知道如何设置cron作业本身的唯一方法。 没关系,但是我宁愿把它设置在系统范围内,所以这不是一件好事。
感谢您的帮助。 这似乎应该很容易(不)。
编辑 – 解决
好的,我明白了这一点。 这似乎是一个问题,无论是与CentOS 6或可能是我的机器configuration。 在CentOS 5configuration上,我可以在/etc/security/limits.conf
设置:
* - nproc unlimited
这将有效更新帐户和cron限制。 但是,这在我的CentOS 6框中不起作用。 相反,我必须这样做:
myname1 - nproc unlimited myname2 - nproc unlimited ...
事情按预期工作。 也许UID规范工作,但通配符(*)绝对不会在这里。 奇怪的是,通配符在nofile
限制下工作。
我仍然很想知道默认值是从哪里来的,因为默认情况下,这个文件是空的,我不明白为什么两个CentOS盒子有不同的默认值,它们有相同的硬件,来自同一个提供者。
这些“默认”限制适用于:
init
进程), fork(2)
时间), setrlimit(2)
)。 普通用户的stream程不能提高硬性限制。
在引导时,Linux为init
进程设置了默认限制,然后所有其他(subprocess)进程inheritance它们。 要查看这些限制: cat /proc/1/limits
。
例如, 文件描述符 ( ulimit -n
)的最大内核默认值是1024/1024(soft,hard),在Linux 2.6.39中已经提升到1024/4096。
您正在讨论的默认最大进程数 限制为大约:
Total RAM in kB / 128
对于x86体系结构(至less),但分发有时会更改默认内核值,因此请检查内核源代码是否为kernel/fork.c
, fork_init()
。 “进程数”限制在那里被称为RLIMIT_NPROC。
通常,为了确保用户在login时进行身份validation,PAM与一些模块一起使用(请参阅/etc/pam.d/login
)。
在Debian上,负责设置限制的PAM模块在这里: /lib/security/pam_limits.so
。
这个库将从/etc/security/limits.conf
和/etc/security/limits.d/*.conf
读取它的configuration,但即使这些文件是空的, 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(通常,如果它们不是由login用户启动的,如daemons和cron作业)。
在RHEL6(CentOS6)上, “max user processes”默认设置为1024。
您可以在文件中更改此值:
/etc/security/limits.d/90-nproc.conf
见https://bugzilla.redhat.com/show_bug.cgi?id=432903如果你想抱怨:)
当你检查限制,你是否使用root用户这样做?
从limits.conf
页:
注:组和通配符限制不适用于root用户。 要为root用户设置限制,此字段必须包含文字用户名root。
在这种情况下使用明确的用户名可以解决问题。
核心/ fork.c
max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);
在64位线程大小是8192
grep -i total /proc/meminfo MemTotal: 8069352 kB
现在我得到了除以4的总分
echo $((8069352/4)) 2017338
现在我得到了页数
echo $((8 * 8192 / 4096) 16
最终的结果是
echo $((2017338/16)) 126083
这样你就得到了thread-max参数,默认的用户进程限制是一半
init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2; init_task.signal->rlim[RLIMIT_NPROC].rlim_max = max_threads/2;
从根目录ulimit
ulimit -u 62932 echo $((62932*2)) 125864 #we are near
它似乎是/etc/security/limits.conf
在/etc/security/limits.conf中configuration“noproc”的configuration不能正常工作。
还有一个文件覆盖你的configuration/etc/security/limits.d/90-nproc.conf。
*软nproc 1024 根软nproc无限
这里的*configuration将覆盖你在以前的configuration文件中设置的任何东西 所以理想情况下,你在这个文件中configuration你的设置。
关于这方面的信息在互联网上是可怕的,inheritance人是我为debian linux制作的limits.conf文件,显示了所有可能的选项和最大的“安全”限制,相应地调整。
这些是你可以设置的最高值,有些东西是哈希出来的,激活那些导致你错误,无法login到控制台,修改注释掉的选项,风险自负,但你不应该需要(默认是无限的大多数)
我希望这对某人有用,因为我无法在任何地方find这个信息,对这个文件进行4个小时的研究。
==== FILE START ===== # /etc/security/limits.conf # #Each line describes a limit for a user in the form: # #<domain> <type> <item> <value> # #Where: #<domain> can be: #- a user name #- a group name, with @group syntax #- the wildcard *, for default entry #- the wildcard %, can be also used with %group syntax, # for maxlogin limit #- NOTE: group and wildcard limits are not applied to root. # To apply a limit to the root user, <domain> must be # the literal username root. # #<type> can have the two values: #- "soft" for enforcing the soft limits #- "hard" for enforcing hard limits # #<item> can be one of the following: #- core - limits the core file size (KB) #- data - max data size (KB) #- fsize - maximum filesize (KB) #- memlock - max locked-in-memory address space (KB) #- nofile - max number of open files #- rss - max resident set size (KB) #- stack - max stack size (KB) #- cpu - max CPU time (MIN) #- nproc - max number of processes #- as - address space limit (KB) #- maxlogins - max number of logins for this user #- maxsyslogins - max number of logins on the system #- priority - the priority to run user process with #- locks - max number of file locks the user can hold #- sigpending - max number of pending signals #- msgqueue - max memory used by POSIX message queues (bytes) #- nice - max nice priority allowed to raise to values: [-20, 19] #- rtprio - max realtime priority #- chroot - change root to directory (Debian-specific) # #<domain> <type> <item> <value> # #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #ftp - chroot /ftp #@student - maxlogins 4 # -- Defaults: #(core) core file size (blocks, -c) 0 (ulimit -Hc or -Sc) #(data) data seg size (bytes, -d) unlimited #(priority) scheduling priority (-e) 0 #(fsize) file size (blocks, -f) unlimited #(sigpending) pending signals (-i) 378197 #(memlock) max locked memory (kbytes, -l) 64 # max memory size (kbytes, -m) unlimited #(nofile) open files (-n) 65536 # pipe size (512 bytes, -p) 8 #(msgqueue) POSIX message queues (bytes, -q) 819200 #(rtprio) real-time priority (-r) 0 #(stack) stack size (kbytes, -s) 8192 #(cpu) cpu time (seconds, -t) unlimited #(nproc) max user processes (-u) 378197 # virtual memory (kbytes, -v) unlimited #(locks) file locks (-x) unlimited # -- root Limits: root - core -1 root - data -1 root - fsize -1 root - memlock -1 root - nofile 999999 root - stack -1 root - cpu -1 root - nproc -1 root - priority 0 root - locks -1 root - sigpending -1 root - msgqueue -1 root - rtprio -1 root - maxlogins -1 root - maxsyslogins -1 #root - rss -1 #root - as -1 #root - nice 0 #root - chroot -1 #All Users: # -- Hard Limits * hard core -1 * hard data -1 * hard fsize -1 * hard memlock -1 * hard nofile 999999 * hard stack -1 * hard cpu -1 * hard nproc -1 * hard priority 0 * hard locks -1 * hard sigpending -1 * hard msgqueue -1 * hard rtprio -1 * hard maxlogins -1 * hard maxsyslogins -1 #* hard rss -1 #* hard as -1 #* hard nice 0 #* hard chroot -1 # -- Soft Limits * soft core -1 * soft data -1 * soft fsize -1 * soft memlock -1 * soft nofile 999999 * soft stack -1 * soft cpu -1 * soft nproc -1 * soft priority 0 * soft locks -1 * soft sigpending -1 * soft msgqueue -1 * soft maxlogins -1 * soft maxsyslogins -1 * soft rtprio -1 #* soft rss -1 #* soft as -1 #* soft nice 0 #* soft chroot -1 #randomuser: # -- Soft Limits randomuser soft core -1 randomuser soft data -1 randomuser soft fsize -1 randomuser soft memlock -1 randomuser soft nofile 999999 randomuser soft stack -1 randomuser soft cpu -1 randomuser soft nproc -1 randomuser soft priority 0 randomuser soft locks -1 randomuser soft sigpending -1 randomuser soft msgqueue -1 randomuser soft maxlogins -1 randomuser soft maxsyslogins -1 randomuser soft rtprio -1 #randomuser soft rss -1 #randomuser soft as -1 #randomuser soft nice 0 #randomuser soft chroot -1 # End of file