一、 概述:
凌晨对XX系统做了压力测试,早上访问就报404错了。故障发生时未做线程堆栈。根据server的日志,对问题作出简要分析。
二、 系统环境:
OS版本:solaris
weblogic版本:813
三、 故障分析及解决方案:
n 故障分析:
出错日志如下
<2010-3-23上午05时47分40秒 CST> <Error> <HTTP> <BEA- 101019><[ServletContext(id=1213248,name=XXX,context-path=)] Servlet failed withIOException
java.io.FileNotFoundException:/bea/home/XXX/user_projects/domains/XXXdomain/applications/XXX/images/icon_arrow.gif(Too many open files)
atjava.io.FileInputStream.open(Native Method)
atjava.io.FileInputStream.<init>(FileInputStream.java:106)
atweblogic.utils.classloaders.FileSource.getInputStream(FileSource.java:23)
atweblogic.servlet.FileServlet.sendFile(FileServlet.java:559)
atweblogic.servlet.FileServlet.service(FileServlet.java:206)
atjavax.servlet.http.HttpServlet.service(HttpServlet.java:853)
atweblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
atweblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
atweblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
atcom.bos.ebank.servlet.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:88)
atweblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
atweblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6458)
atweblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
atweblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
atweblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
atweblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
atweblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
atweblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
该报错是一个典型的错误,表示操作系统文件描述符过小。往往在压力测试或者系统并发量上来的时候会发生。
n 解决方案
关于设置solaris文件描述符:
1.首先要修改系统参数:
Solaris有两个参数控制进程可打开的文件描述符:rlim_fd_max,rlim_fd_cur。前者修改是个硬设置,修改需要权限,后者是个软设置,用户可以limit或者setrlimit() 修改,该值最大不能超过前者。一般我们在/etc/system里修改这两个参数
setrlim_fd_max = 8192
setrlim_fd_cur = 8192
注意点:修改完后需重启操作系统。
2.修改commEnv.sh
———–
直接在resetFd()中设置ulimit-n 8192
resetFd(){
# if [! -n "`uname -s |grep -i cygwin || uname -s |grep -i windows_nt`" ]
# then
#maxfiles=`ulimit -H -n`
# if ["$?" = "0" -a "${maxfiles}" != 1024 ]; then
# if ["${maxfiles}" = "unlimited" ]; then
#maxfiles=1025
# fi
# if ["${maxfiles}" -lt 1024 ]; then
#ulimit -n ${maxfiles}
# else
#ulimit -n 1024
# fi
# fi
# fi
ulimit-n 8192
}
3.最后请您修改startWebLogic.sh,在“# START WEBLOGIC” 前加上以下语句:
echo———-
echoulimit -n
ulimit-n
echo———-
这样,当启动weblogicserver (尤其是managed server)时,会有如下log输出到标准输出中:
———-
ulimit-n
8192
———-
示例:
-bash-3.00#./startWebLogic.sh
.
.
JAVAMemory arguments: -Xms128m -Xmx128m -XX:CompileThreshold=8000-XXermSize=48m -XX:MaxPermSize=128m
.
WLSStart Mode=Development
.
CLASSPATH=:/opt/bea9/patch_weblogic923/profiles/default/sys_manifest_classpath/weblogic_patch.jar:/usr/jdk/instances/jdk1.5.0/lib/tools.jar
:/opt/bea9/weblogic92/server/lib/weblogic_sp.jar:/opt/bea9/weblogic92/server/lib/weblogic.jar:/opt/bea9/weblogic92/server/lib/webservices.jar::
/opt/bea9/weblogic92/common/eval/pointbase/lib/pbclient51.jar:/opt/bea9/weblogic92/server/lib/xqrl.jar::
.
PATH=/opt/bea9/weblogic92/server/bin:/usr/jdk/instances/jdk1.5.0/jre/bin:/usr/jdk/instances/jdk1.5.0/bin:/usr/sbin:/usr/bin
.
***************************************************
* To start WebLogic Server, use a username and *
* password assigned to an admin-level user. For *
* server administration, use the WebLogic Server *
* console at
http://hostname:port/console *
***************************************************
———-
ulimit-n
8192
———-
startingweblogic with Java version:
javaversion “1.5.0_17″
Java(TM)Platform, Standard Edition for Business (build 1.5.0_17-b04)
JavaHotSpot(TM) Client VM (build 1.5.0_17-b04, mixed mode, sharing)
StartingWLS with line:
/usr/jdk/instances/jdk1.5.0/bin/java-client -Xms128m -Xmx128m -XX:CompileThreshold=8000-XXermSize=48m -XX:MaxPermSize=128m -Xverify:none -da-Dplatform.home=/opt/bea9/weblogic92 -Dwls.home=/opt/bea9/weblogic92/server -Dwli.home=/opt/bea9/weblogic92/integration -Dweblogic.management.discover=true -Dweblogic.threadpool.MinPoolSize=10-Dweblogic.threadpool.MaxPoolSize=10 -Dwlw.iterativeDev= -Dwlw.testConsole=-Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=/opt/bea9/patch_weblogic923/profiles/default/sysext_manifest_classpath-Dweblogic.Name=AdminServer-Djava.security.policy=/opt/bea9/weblogic92/server/lib/weblogic.policy weblogic.Server
<Dec29, 2009 3:15:19 PM EST> <Notice> <WebLogicServer><BEA-000395> <Following extensions directory contents added to the endof the classpath:
/opt/bea9/weblogic92/platform/lib/p13n/p13n-schemas.jar:/opt/bea9/weblogic92/platform/lib/p13n/p13n_common.jar:/opt/bea9/weblogic92/platform/lib/p13n/p13n_system.jar:/opt/bea9/
weblogic92/platform/lib/wlp/netuix_common.jar:/opt/bea9/weblogic92/platform/lib/wlp/netuix_schemas.jar:/opt/bea9/weblogic92/platform/lib/
wlp/netuix_system.jar:/opt/bea9/weblogic92/platform/lib/wlp/wsrp-common.jar>
<Dec29, 2009 3:15:20 PM EST> <Info> <WebLogicServer><BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VMVersion 1.5.0_17-b04 from Sun Microsystems Inc.>
<Dec29, 2009 3:15:23 PM EST> <Info> <Management> <BEA-141107><Version: WebLogic Server 9.2 MP3 Mon Mar 10 08:28:41 EDT 2008 1096261>
<Dec29, 2009 3:15:28 PM EST> <Info> <WebLogicServer><BEA-000215> <Loaded License : /opt/bea9/license.bea>
<Dec29, 2009 3:15:28 PM EST> <Notice> <WebLogicServer><BEA-000365> <Server state changed to STARTING>
到此,参数修改成功,一般推荐的值是8192.