欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

关于RHEL6中ulimit的nproc限制

Linux water 3964℃ 0评论

关于RHEL6中ulimit的nproc限制

文章目录

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

修改limits.conf配置文件生效

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

修改limits.conf配置文件生效

[root@kumu ~]# 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@kumu ~]# vim /etc/security/limits.conf  

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

*       soft    nproc       10240 

*       hard    nproc       10240 

*       soft    nofile      10240 

*       hard    nofile      10240 

[root@kumu ~]# 

 

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

[root@kumu ~]# ulimit -n 

10240 

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

1024 

[root@kumu ~]# 

 

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

(参见了@杨德华Devin 文章redhat5 和redhat6 root用户不同的ulimits)

[root@kumu ~]# 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@kumu ~]# 

 

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

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

[root@kumu ~]# 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@kumu ~]# 

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

[root@kumu ~]# ulimit -u   

10240   

[root@kumu ~]# ulimit -n   

10240   

[root@kumu ~]#  

 

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

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

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

[root@kumu ~]# 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@kumu ~]# vim /etc/security/limits.conf        //只针对某个用户测试(这里使用root) 

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

root        soft    nproc       10240 

root        hard    nproc       10240 

[root@kumu ~]# 

 

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

[root@kumu ~]# ulimit -u 

10240 

[root@kumu ~]# ulimit -n 

10240 

[root@kumu ~]# 

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

====================================================================

关于Centos6中ulimit nproc用户进程数的限制

一、缘由:

  在启动mongodb的时候,有Warning提示soft rlimits too low,就是用户使用进程数过小,遂调高系统资源关于用户最大进程数的限制ulimit -u。

先暂时使设置生效,ulimit -u 102400,提示: ulimit: max user processes: cannot modify limit: Operation not permitted。

修改/etc/security/limits.conf 为 * soft nproc 102400,退出shell后重新登陆,依然不行。后经Google是/etc/security/limits.d/90-nproc.conf

的限制,在Centos 6中。

 

二、解决办法:

  文件90-nproc.conf中由此解释Default limit for number of user's processes to prevent,可见这个文件默认用来限制用户拥有的最大进程数量。

 经查看,每个用户(*)的nproc被限制为65535,故设置100000超过系统最大用户进程数限制。

# Default limit  number of user * soft nproc 
    * hard nproc

   故需要修改90-nproc.conf为 soft nproc 100000,重新登录后即可生效。

  或者,如果只是相对某个单个用户进行限制更改,可以修改/etc/security/limits.conf,将*改成具体用户名也是可以生效的。

比如:

  mongod soft nproc 100000
  mongod hard nproc 100000

注:楼主曾尝试在90-nproc.conf中设置nofile的值,也是可以生效的,系统以他为标准;但是不建议这么设置。

 

三、关于linux下用户资源限制limits.conf详解

  1、limits.conf文件实际上是linux PAM(认证模块)中pam_limits.so的配置文件,而且只针对单个会话。

  2、要使limits.conf文件配置生效,必须确保pam_limits.so文件被加入启动文件中。要查看/etc/pam.d/login文件中有session required /lib/security/pam_limits.so

limits.conf文件格式如下:

<domain>  <type>  <item>  <value>

  domain有好几种格式,具体可以用cat limits.conf来查看,不过一般来说,我们都是用的用户名和组名的形式:username|@groupname

  设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有的限制。

  type:有soft,hard和-,soft指的是当前系统生效的设置值,软限制也可以理解为警告值。hard表名系统中所能设定的最大值。soft的限制不能比hard限制高,

     用 – 表明同时设置了soft和hard的值。

  item表明需要限制的使用资源类型

  core  限制内核文件的大小

  data  最大数据大小

  fsize  最大文件大小

  memlock  最大锁定内存地址空间

  nofile  打开文件的最大数目

  rss  最大持久设置大小

  stack  最大栈大小

  cpu  以分钟为单位的最多CPU时间

  noproc 进程的最大数目

  as  地址空间限制

  maxlogins  此用户允许登录的最大数目

=========================================================

    一、问题发生的背景:

   在一台测试服务器上搭建一套应用环境,正在做着,当我开启了最后一个程序时,终端突然提示说命令不可用了,无论我做什么动作都直接拒绝。当时以为是这个终端出了问题,于是打算再开一个终端,却再也无法登陆上去了。

   我就觉得很奇怪,一开始以为是这台服务器挂了,但是当我去平台查看时发现仍然是正常运转的,只是内存使用率较高。此时登陆的用户是root,而我搭建应用环境用的是普通用户,所以我想通过su命令切换回那个用户,当我执行了这个操作时,如题问题就出现了。

   为什么root用户可以正常使用,而其他普通用户就不可以了呢?并且,错误提示是“资源暂时不可用”,是不是因为普通用户做了资源使用限制?因为这个问题是在我开了很多进程之后才出现的,所以有理由这样怀疑。

   二、解决问题的思路:

   通过上网搜索,了解到了能够控制用户资源的文件一般有两个,一是/etc/profile,二是/etc/security/limits.conf。

   先来了解一下这两个文件:

   1./etc/profile是环境变量配置文件,可能也有ulimit配置,不过在查看了我自己的后,发现这里并没有做特别的limit限制;

   2./etc/security/limits.conf

wKiom1jCTUvwcvA5AABqSnGVCTs551.png-wh_50

domain: 

是指限制的对象,可以是个人,也可以是组,组前面要加@符号,也可以设置为除root用户外的 任何人,用*号表示;

type:

是指类型,soft是当前系统生效的值,hard是系统可以设置的最大值;

item:

项目,是可以对什么项目做限制,如最大进程数,文件最大值;

value:

值,所设置的值的大小。


   疑惑的是,在/etc/security/limits.conf配置文件中可以看到,进程数和打开文件数的最大值,已经开得够大了,可是为什么还会出现这种现象呢?

   经过查找,发现Centos6.x版本后,还有一个配置文件对ulimit设置生效,就是/etc/security/limits.d/90-nproc.conf,果然,打开文件后发现,默认最大进程数只有1024,明显是不能满足我搭建应用环境的需求的。于是,把1024改成10240后,再执行su qjzh就成功了。同时,可以看到,对root是unlimited的。


wKiom1jCUUbDK8NFAAAibmgM1us276.png-wh_50


解决这个问题的方法有两个:

1.把无用的进程杀掉;

2.把最大进程限制数调大。


       另外,可以使用ulimit命令来临时设置各种资源限制,并且通过  ulimit -a  命令可以查看当前用户的各种限制值的大小。

转载请注明:学时网 » 关于RHEL6中ulimit的nproc限制

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!