最近公司的川师项目连续2天在频繁报警,而且时间点都是晚上11点过几分的样子.而且是就是too many file open日志如下:

(Too many open files) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:112) 
    at weblogic.utils.classloaders.FileSource.getInputStream(FileSource.java:31) 
    at weblogic.servlet.internal.WarSource.getInputStream(WarSource.java:65) 
    at weblogic.servlet.FileServlet.sendFile(FileServlet.java:400) 
    Truncated. see log file for complete stacktrace

从日志本身可以发现“Too many open files”,说明同时打开的文件数过多,
于是估计Linux/AIX操作系统中会有参数设置允许同时打开的最大文件数量,具体查看方法可以参考:

http://hi.baidu.com/bluesnake/blog/item/d267e350019a85591138c2f2.html

第一天过后修改了linux系统的参数,并编写了一个监控脚本监控连接数目,第二天还是不对.而经过查看,在本项目正式环境中已经将允许同时打开的最大文件数量设置为了一个很大的数目,所以应该不是服务器的原因,转而查看WebLogic的配置,猜测是由WebLogic的配置文件指定了部署在WebLogic上的应用允许同时打开的最大文件数量。

首先查看startWebLogic.sh和setDomainEnv.sh,都没有发现类似设置,接下来查看WebLogic本身的配置commEnv.sh(***\wlserver_10.3\common\bin),发现如下内容:

# limit the number of open file descriptors
resetFd() {
  if [ ! -"`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
}

可以发现weblogic真的限制了,最大的文件打开数目.
在***\wlserver_10.3\common\bin\目录下找到commEnv.sh,修改其resetFd()函数的ulimit -n 后面的数值,根据操作系统不同系统适量调大,调整后为 2048在当前服务器负载下并未出现异常.

改大了连接数目 等咯两天有出问题了 内存溢出 解决办法

修改weblogic\user_projects\domains\base_domain\bin下的setDomainEnv.cmd文件:

修改 

MEM_ARGS="-Xms2048m -Xmx2048m"
export MEM_ARGS

将内存设置到一个合适的值.

 posted on 2012-04-25 12:15  Shadow.R  阅读(9801)  评论(0编辑  收藏  举报