默认的ulimit值在哪里设置?(Linux,centos)


34

我有两台具有几乎相同规格的CentOS 5服务器。当我登录并执行操作时ulimit -u,在一台计算机上我会收到unlimited,而在另一台计算机上我会得到77824

当我像这样运行cron时:

* * * * * ulimit -u > ulimit.txt

我得到相同的结果(unlimited77824)。

我正在尝试确定这些位置,以便我可以对其进行更改。他们不是在我的任何配置文件(设置.bashrc/etc/profile等等)。这些都不会影响cron),也不会影响in /etc/security/limits.conf(它是空的)。

我已经搜寻过Google,甚至还可以做grep -Ir 77824 /,但到目前为止没有任何进展。我不明白这些机器如何预先设置不同的限制。

我实际上不是在为这些机器而不是在为另一台(CentOS 6)机器而感到奇怪,该机器的极限值1024太小了。我需要以更高的限制运行cron作业,而我知道如何设置cron作业本身的唯一方法。没关系,但是我宁愿将其设置为系统范围内的,所以它也不那么笨拙。

谢谢你的帮助。这似乎应该很容易(不)。


编辑-解决

好的,我知道了。CentOS 6或我的机器配置似乎都存在问题。在CentOS 5的配置中,我可以设置为/etc/security/limits.conf

* - nproc unlimited

这将有效地更新帐户和cron限制。但是,这在我的CentOS 6盒中不起作用。相反,我必须这样做:

myname1 - nproc unlimited
myname2 - nproc unlimited
...

事情按预期进行。也许UID规范可以使用,但是通配符(*)绝对不在此处。奇怪的是,通配符确实可以发挥作用nofile

我仍然很想知道默认值的实际来源,因为默认情况下此文件为空,而且我看不到为什么两个CentOS盒具有不同的默认值,它们具有相同的硬件并且来自同一提供商。


3
你有东西/etc/security/limits.d/吗?
Patrick

不,该目录为空
nomercysir 2012年

1
您可以在一定等待时间后将答案发布为实际答案。
sysadmin1138

2
我曾经在某处查找过此内容。默认值由内核设置。部分硬编码,部分取决于可用的内存。我想我发现在Oracle Metalink上为Oracle-DB 11.2设置SLES10的情况
Nils

1
可以将此问题标记为已解决吗?

Answers:


45

这些“默认”限制适用于:

  • Linux内核启动时(该init进程),
  • 从父进程的限制继承(在fork(2)时间上),
  • 打开用户会话时可以使用 PAM(可以替换内核/继承的值),
  • 过程本身(可以取代PAM&内核/继承值,参见setrlimit(2))。

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

Linux内核

在引导时,Linux为init进程设置默认限制,然后由所有其他(子)进程继承。要查看这些限制:cat /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

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

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

该库将读取配置/etc/security/limits.conf/etc/security/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作业)。


正确,观点正确,评论已删除。我想我想对大多数用户来说,可能已启用PAM,所以我建议您先检查/etc/security/limits.conf和/etc/security/limits.d/*文件。在这个我也曾遇到过的特定实例中,默认情况下,通过limits.d文件在CentOS 6中施加了1024个进程/总用户线程限制。
rogerdpack

@rogerdpack是的,PAM确实已启用,但是,正如我在回答中所说:“请注意,许多进程将不会通过PAM(通常,如果它们不是由登录用户启动的,例如守护程序和cron,职位)”。我们的讨论没有附加值,因此,如果您删除所有评论,我将删除我的。谢谢。
Totor

SuSE发行版提供了ulimit软件包,该软件包提供了/etc/initscript“可方便地根据过程限制进行调整”,可通过进行配置/etc/sysconfig/ulimit
sendmoreinfo

另外,Linux-PAM库读取/proc/1/limits自1.1.4版(2011年发行)以来内核设置的限制。
sendmoreinfo,2016年

@sendmoreinfo,除了读取内核外,Linux-PAM库对内核设置的限制有何作用?
Totor

15

在RHEL6(CentOS6)上, “最大用户进程”默认设置为1024。
您可以在文件中更改此值:

/etc/security/limits.d/90-nproc.conf

如果您想抱怨的话,请参阅https://bugzilla.redhat.com/show_bug.cgi?id=432903


我怀疑nproc的1024值是否正确,作者说它的limits.d目录为空,因此默认值显然未在其中定义。
Totor 2013年

Totor无法在技术上与您争论,但Tom我发现它很有帮助,非常感谢!
部分多云

3

当您检查限制时,您是否在使用root用户这样做?

limits.conf联机帮助页:

注意:组和通配符限制不适用于root用户。要为root用户设置限制,此字段必须包含文字用户名root。

在这种情况下,使用显式用户名可以解决此问题。


注意,这可能是Debian特有的 “功能”。
Totor

此外,该limits.conf文件为空(作为limits.d目录)。
Totor 2013年

3

关于此的信息在互联网上是很糟糕的,这是我为debian linux创建的limits.conf文件,其中显示了所有可能的选项以及它们的最大“安全”限制,并相应地进行了调整。

这些是您可以设置的最大值,一些值被散列,激活这些值会导致您出错并无法登录到控制台,修改注释掉的选项需要您自担风险,但您无需这样做(默认值是无限的)在大多数)

我希望这对某人有用,因为我在任何地方都找不到此信息,对此文件进行了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

2

内核/ fork.c

max_threads = mempages / (8 * THREAD_SIZE / PAGE_SIZE);

在64位上,线程大小为8192

 grep -i total /proc/meminfo 
 MemTotal:        8069352 kB

现在我得到的总数是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 -u
62932
echo $((62932*2))
125864 #we are near


1

在/etc/security/limits.conf中进行配置时,还有一种可能性是“ noproc”的配置不起作用。

还有一个文件覆盖了您的配置/etc/security/limits.d/90-nproc.conf。

*软nproc 1024
根软nproc无限

在这里* config将覆盖您在先前的配置文件中设置的任何内容。因此,理想情况下,您可以在此文件中配置设置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.