1. 程式人生 > >Linux 提示 Resource temporarily unavailable

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  此使用者允許登入的最大數目