默认的 ulimit 值在哪里设置?(linux、centos)

默认的 ulimit 值在哪里设置?(linux、centos)

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

当我运行如下 cron 时:

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

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

我正在尝试确定这些设置的位置,以便我可以更改它们。它们没有在我的任何配置文件中设置(.bashrc/etc/profile等)。无论如何,这些都不会影响 cron)或/etc/security/limits.conf(为空)。

我搜索了谷歌,甚至还做了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 盒子有不同的默认值,它们具有相同的硬件并且来自同一个提供商。

答案1

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

  • Linux 内核开机时间(至initsystemd过程),
  • 遗产,从父进程的限制(在fork(2)时间),
  • 聚丙烯酰胺 当用户会话打开时(可以替换内核/继承的值),
  • systemd尤其是它所管理的流程,
  • 过程本身(可以替换 PAM 和内核/继承的值,请参阅setrlimit(2))。

普通用户的进程无法提高硬限制。

Linux 内核

在启动时,Linux 会为init(或systemd)进程设置默认限制,然后所有其他(子)进程都会继承这些限制。要查看这些限制: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 与一些模块一起使用(请参阅/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 作业)。

systemd

如今,systemd它被广泛使用,它可以替代init并且还可以配置特定的限制值,特别是对它自己管理和创建的进程/守护进程。

其默认使用的某些限制可以在 中手动配置/etc/systemd/system.conf。 文档中提供了更多信息。

答案2

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

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

https://bugzilla.redhat.com/show_bug.cgi?id=432903如果你想抱怨一下:)

答案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

答案4

内核/fork.c

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

64 位线程大小为 8192

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

现在我除以 4 得到总数(以 kb 为单位)

 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;

从 root 执行 ulimit

ulimit -u
62932
echo $((62932*2))
125864 #we are near

相关内容