最近公司的川師項目連續2天在頻繁報警,而且時間點都是晚上11點過幾分的樣子.而且是就是too many file open日志如下:
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),發現如下內容:
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
}
可以發現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
將內存設置到一個合適的值.