本文根据网上文章整理。

在出现Too many open files问题后,首先得找出主要原因。最大的可能是打开的文件或是socket没有正常关闭。为了定位问题是否由Java进程引起,通过Java进程号查看当前进程占用文件描述符情况:


lsof -p $java_pid 每个文件描述符的具体属性  

lsof -p $java_pid | wc -l  当前Java进程file descriptor table中FD的总量  


lsof -p $java_pid 每个文件描述符的具体属性 lsof -p $java_pid | wc -l  当前Java进程file descriptor table中FD的总量


分析命令的结果,可判断问题是否由非正常释放资源所引起。


原因一、linux设置问题

查看系统允许打开的最大文件数
     #cat /proc/sys/fs/file-max

查看每个用户允许打开的最大文件数
     ulimit -a


使用ulimit -a命令可以查看ulimit设置,使用ulimit -n4096命令可以直接设置ulimit属性,但是如果需要设置永久生效,可以按照如下方式: vi /etc/security/limits.conf # 添加如下的行

* soft noproc 11000

* hard noproc 11000

* soft nofile 4096

* hard nofile 4096

说明:

* 代表针对所有用户

noproc 是代表最大进程数

nofile 是代表最大文件打开数


原因二、WebLogic设置问题

WebLogic的配置文件指定了部署在WebLogic上的应用允许同时打开的最大文件数量。
首先查看WebLogic本身的配置commEnv.sh(*** \common\bin),发现如下内容:

resetFd() {

 if [ ! -n "`uname-s |grep -i cygwin || uname -s |grep -i windows_nt || \

             uname -s|grep -i HP-UX`" ]

 then

   maxfiles=`ulimit -H-n`

   if [ "$?" ="0" -a  `expr ${maxfiles} : '[0-9][0-9]*$'`-eq 0 ]; then

       ulimit -n 1024

   fi

 fi

}

……

resetFd


在该配置文件中指定了该数量,其默认值为1024,将其修改,重新启动WebLogic。