红联Linux门户
Linux帮助

关于RHEL6中ulimit的nproc限制

发布时间:2014-07-29 15:20:29来源:linux网站作者:kumu1988

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。


关于RHEL6中ulimit的nproc限制,RHEL6和RHEL5还是有一些细节上的区别的:

v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}

当前shell下更改用户可打开进程数

作为临时限制,ulimit可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话。


修改limits.conf配置文件生效

[root@ linux ~]# ulimit -a //查看当前配置文件ulimit全局系数

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

scheduling priority (-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 1829

max locked memory (kbytes, -l) 64

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

real-time priority (-r) 0

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 1024

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited

[root@ linux ~]# vim /etc/security/limits.conf

[root@ linux ~]# grep '^*' /etc/security/limits.conf

* soft nproc 10240

* hard nproc 10240

* soft nofile 10240

* hard nofile 10240

[root@ linux ~]#


退出当前用户,重新登录即可让之前修改的limits生效

[root@ linux ~]# ulimit -n

10240

[root@ linux ~]# ulimit -u //发现nproc并没有像nofile一样而改变

1024

[root@ linux ~]#


获知,RHEL6下引入了配置文件/etc/security/limits.d/90-nproc.conf

[root@ linux ~]# cat /etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

*          soft    nproc    1024

[root@ linux ~]#


我们修改这个文件尝试是否因为该文件影响,修改如下

[root@ linux ~]# vim /etc/security/limits.d/90-nproc.conf

[root@ linux ~]# cat /etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

#*          soft    nproc    1024

*          soft    nproc    65535

[root@ linux ~]#


退出当前用户,重新登录即可让之前修改的limits生效,执行如下命令发现修改成功

[root@ linux ~]# ulimit -u

10240

[root@ linux ~]# ulimit -n

10240

[root@ linux ~]#


由此可知,如果要修改配置文件limits.conf中的nproc限制上限是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制约的,但是shell终端下是不受制约的


另外笔者猜想,如果使用*号让全局用户生效是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响

[root@ linux ~]# vim /etc/security/limits.d/90-nproc.conf  //恢复系统默认设置

[root@ linux ~]# cat /etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent

# accidental fork bombs.

# See rhbz #432903 for reasoning.

*          soft    nproc    1024

#*          soft    nproc    65535

[root@ linux ~]# vim /etc/security/limits.conf      //只针对某个用户测试(这里使用root)

[root@ linux ~]# grep '^root' /etc/security/limits.conf

root        soft    nproc      10240

root        hard    nproc      10240

[root@ linux ~]#


退出当前用户,重新登录即可让之前修改的limits生效,执行如下命令发现修改成功

[root@ linux ~]# ulimit -u

10240

[root@ linux ~]# ulimit -n

10240

[root@ linux ~]#


笔者之前猜想正确,即只有当使用*号让全局用户生效的时候,生效的nproc的值大小是受文件/etc/security/limits.d/90-nproc.conf中nproc值大小制约的,而如果仅仅是针对某个用户,那么就不受该文件nproc值大小的影响。