天天看點

too many file open 問題解決

 前幾天突然測試環境的項目突然不能用了,打開tomcat的log檢視報錯:

too many file open 

人話就是句柄不夠用了,一般原因有兩個:1.打開的應用過多超出了伺服器限制 2.代碼中有未關閉的連接配接,流之類的導緻的socket洩露,需要排查。不過要程式能先跑起來,可以先增大句柄(file)數。

1.運作指令 ulimit -a可以看到

[[email protected] ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 127979

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) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 127979

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

标紅的隻有1024,增大一下吧。

2.vi /etc/pam.d/login

在檔案中增加一行:

session required /lib/security/pam_limits.so

注:有這一行的不用增加了

3:vi /etc/security//limits.conf

檔案中增加:

root soft nofile 655360

root hard nofile 655360

* soft nofile 655360

* hard nofile 655360

注:如果檔案中有這四行,隻修改末尾的數字即可。

4.關閉連接配接重新登入:運作一下ulimit -a 即可看到完成了修改。

注:另外可以根據程序檢視是哪個程序洩露了socket: 

lsof -p pid|wc -l

檢視系統總限制 指令:cat /proc/sys/fs/file-max

檢視整個系統目前使用的檔案句柄數量指令:cat /proc/sys/fs/file-nr

也可以看到某個目錄 /檔案被什麼程序占用了,顯示已打開該目錄或檔案的所有程序資訊 :lsof path/filename