天天看点

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