解決WebLogic中Too many open files異常

perfychi發表於2014-09-04
From :http://oracleseeker.com/2009/09/29/weblogic_too_many_open_file/


解決WebLogic中Too many open files異常

九月 29, 2009 in 

在經過近期的連續加班,專案最後階段的開發終於完成,並於前天晚上順利實施上線,上線後就凌晨2點鐘了,雖然身體有些疲憊,心理卻輕鬆了很多。可是沒想到早晨來上班,剛走到客戶公司樓下,就接到電話說正式環境的伺服器當掉了,跑到樓上開啟電腦下載正式環境的伺服器日誌,發現瞭如下異常資訊:

 
java.io.FileNotFoundException: /***/wlserver_10.3/server/lib/consoleapp/webapp/images/sort_up.gif (Too many open files) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.(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 [postads250x250] 
而經過檢視,在本專案正式環境中已經將允許同時開啟的最大檔案數量設定為了unlimited,所以應該不是伺服器的原因,轉而檢視WebLogic的配置,猜測是由WebLogic的配置檔案指定了部署在WebLogic上的應用允許同時開啟的最大檔案數量。 
首先檢視startWebLogic.sh和setDomainEnv.sh,都沒有發現類似設定,接下來檢視WebLogic本身的配置commEnv.sh(***\wlserver_10.3\common\bin),發現如下內容:

? TEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
# limit the number of open file descriptors
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,嘗試將其改大,在網上查了下,在AIX4.3版本之後該值最大可以被設定為32768,於是我嘗試將其改成了32768,重新啟動WebLogic,正常被啟動,且再未出現該異常:)

總結下來,該問題的解決方案如下:

在***\wlserver_10.3\common\bin\目錄下找到commEnv.sh,修改其resetFd()函式的ulimit -n 後面的數值,根據作業系統不同系統適量調大,調整後的該函式應為

? TEXT
1
2
3
4
5
6
7
8
9
10
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 32768
    fi
  fi
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-1263998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章