Linux 提示 Resource temporarily unavailable
摘要:
今天使用使用tomcat使用者登入後,發生錯誤: Resourcetemporarilyunavailable 。並且切換root和使用者,意識該錯誤。 經過深入查詢,排除了內,控制代碼數等問題。使用root使用者重新登入後,開啟大量執行緒時沒有問題。試著調整ulimit各項引數,最後發現是"maxuserprocesses"引數有問題,通過root使用者調整大小。
一、Linux提示的錯誤:
使用root使用者,檢視ulimit各項引數。
ulimit -a
二、檢視nproc。
nproc就是"max user processes",完整描述是: nproc - max number of processes 引數含義:單個使用者可以啟動的執行緒數,因為程序也會啟動一個執行緒,所以也間接對程序數有限制。
檔案20-nproc.conf中由此解釋Default limit for number of user's processes to prevent,可見這個檔案預設用來限制使用者擁有的最大程序數量。經檢視,每個使用者(*)的nproc被限制為4096。
egrep -v "^$|^#" /etc/security/limits.d/20-nproc.conf
故需要修改20-nproc.conf ,重新登入後即可生效。
或者,如果只是相對某個單個使用者進行限制更改,可以修改/etc/security/limits.conf,將*改成具體使用者名稱也是可以生效的。
注:在20-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 此使用者允許登入的最大數目