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

我有两个CentOS 5服务器具有几乎相同的规格.当我登录并执行ulimit -u时,在一台机器上我获得无限制,而在另一台机器上我得到77824.

当我运行cron时:

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

我得到了相同的结果(无限制,77824).

我试图确定这些设置在哪里,以便我可以改变它们.它们未在我的任何配置文件中设置(.bashrc,/ etc / profile等).这些不会影响cron)也不会影响/etc/security/limits.conf(它是空的).

我已经搜索了谷歌,甚至做了grep -Ir 77824 /,但到目前为止还没有发现任何事情.我不明白这些机器如何预设不同的限制.

我实际上不知道这些机器,但是对于一台限制为1024的不同(CentOS 6)机器,这个机器太小了.我需要运行具有更高限制的cron作业,而我知道如何设置它的唯一方法是在cron作业本身.没关系,但我宁愿在系统范围内进行设置,所以它并不像hacky那样.

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

编辑 – 已解决

好的,我想出来了.这似乎是CentOS 6或我的机器配置的问题.在CentOS 5配置中,我可以在/etc/security/limits.conf中设置:

* - nproc unlimited

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

myname1 - nproc unlimited
myname2 - nproc unlimited
...

事情按预期工作.也许UID规范适用,但通配符(*)肯定不在这里.奇怪的是,通配符可以用于nofile限制.

我仍然想知道默认值实际来自哪里,因为默认情况下,这个文件是空的,我看不出为什么我有两个CentOS盒的默认值不同,它们具有相同的硬件并来自同一个提供者.

解决方法

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

> Linux内核在启动时(到init进程),
>继承,来自父进程的限制(在fork(2)时间),
> PAM用户会话打开时(可以替换内核/继承值),
>进程本身(可以替换PAM和内核/继承值,请参阅setrlimit(2)).

普通用户的流程不能超越硬限制.

Linux内核

在引导时,Linux为init进程设置默认限制,然后由所有其他(子进程)进程继承.要查看这些限制:cat / proc / 1 / limits.

例如,最大文件描述符数(ulimit -n)的内核默认值为1024/1024(软,硬),Linux 2.6.39中为has been raised到1024/4096.

您正在谈论的默认最大进程数量约为is limited to

Total RAM in kB / 128

对于x86架构(至少),但是发行版有时会更改默认内核值,因此请检查内核源代码中的kernel / fork.c,fork_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上,库has been patched默认情况下,最大进程数(nproc)是无限制的,最大文件数(nofile)是1024/1024:

06001

因此,请检查您的CentOS’PAM模块源代码(查找RLIMIT_NPROC).

但请注意,许多进程不会通过PAM(通常,如果它们不是由登录用户启动的,例如守护进程和cron作业).

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...