在運作某些指令或者 tomcat等伺服器持續運作 一段時間後可能遇到 too many open files。
出現這句提示的原因是程式打開的檔案/socket連接配接數量超過系統設定值。
ulimit -a
其中 open files (-n) 8192 表示每個使用者最大允許打開的檔案數量是8192 。 預設是1024。1024很容易不夠用。
lsof | wc -l
watch "lsof | wc -l"
lsof隻能以root權限執行。
在終端下輸入lsof即可顯示系統打開的檔案,因為 lsof 需要通路核心記憶體和各種檔案,是以必須以 root 使用者的身份運作它才能夠充分地發揮其功能。
lsof -p pid | wc -l
lsof -p 1234 | wc -l
ulimit -n 2048
這樣就可以把目前使用者的最大允許打開檔案數量設定為2048了,但這種設定方法在重新開機後會還原為預設值。
ulimit -n指令非root使用者隻能設定到4096。
想要設定到8192需要sudo權限或者root使用者。
要使 limits.conf 檔案配置生效,必須要確定 pam_limits.so 檔案被加入到啟動檔案中。檢視 /etc/pam.d/login 檔案中有:
session required /lib/security/pam_limits.so
vim /etc/security/limits.conf
在最後加入
* soft nofile 4096
* hard nofile 4096
或者隻加入
* - nofile 8192
最前的 * 表示所有使用者,可根據需要設定某一使用者,例如
fdipzone soft nofile 8192
fdipzone hard nofile 8192
注意"nofile"項有兩個可能的限制措施。就是項下的hard和soft。 要使修改過得最大打開檔案數生效,必須對這兩種限制進行設定。 如果使用"-"字元設定, 則hard和soft設定會同時被設定。
改完後登出一下就能生效。
如果是puty等工具遠端登入的 重新登入就生效了。不需要重新開機。
<a href="http://blog.itpub.net/27144762/viewspace-1306185/" target="_blank">linux limits.conf配置說明</a>
先看這個檔案的簡介,有英文基礎的應該明白這資源限制到底限制了什麼!!
limits.conf的格式如下:
type:有soft,hard以及-,soft指的是目前系統生效的設定值。hard 表明系統中所能設定的最大值。soft的限制不能比hard限制高。用-就表明同時設定了soft和hard的值。
resource:
core - 限制核心檔案的大小
date - 最大資料大小
fsize - 最大檔案大小
memlock - 最大鎖定記憶體位址空間
nofile - 打開檔案的最大數目
rss - 最大持久設定大小
stack - 最大棧大小
cpu - 以分鐘為機關的最多CPU時間
noproc - 程序的最大數目
as - 位址空間限制
maxlogins - 此使用者允許登入的最大數目
要使limits.conf檔案配置生效,必須要確定 pam_limits.so檔案被加入到啟動檔案中。
檢視 /etc/pam.d/login 檔案中有:(沒有就添加)
注意:
好多人設定了limitc.conf沒有測試,測試後發現沒有生效
原因大多數為:
32位系統 session required /lib/security/pam_limits.so
64位系統 session required /lib64/security/pam_limits.so
本文轉自leonardos51CTO部落格,原文連結:<b>http://blog.51cto.com/leomars/1895489</b> ,如需轉載請自行聯系原作者