一、緣由:
在啟動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 for number of user's processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoning. * soft nproc 65535 * hard nproc 65535
故需要修改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 此用戶允許登錄的最大數目