这两天处理了一个故障:
一、 概述:
2010年3月23日凌晨对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 with IOException
java.io.FileNotFoundException: /bea/home/XXX/user_projects/domains/XXXdomain/applications/XXX/images/icon_arrow.gif (Too many open files)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at weblogic.utils.classloaders.FileSource.getInputStream(FileSource.java:23)
at weblogic.servlet.FileServlet.sendFile(FileServlet.java:559)
at weblogic.servlet.FileServlet.service(FileServlet.java:206)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.bos.ebank.servlet.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:88)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6458)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
该报错是一个典型的错误,表示操作系统文件描述符过小。往往在压力测试或者系统并发量上来的时候会发生。
n 解决方案
关于设置solaris文件描述符:
1. 首先要修改系统参数:
Solaris 有两个参数控制进程可打开的文件描述符:rlim_fd_max,rlim_fd_cur。前者修改是个硬设置,修改需要权限,后者是个软设置,用户可以 limit或者setrlimit() 修改,该值最大不能超过前者。一般我们在/etc/system里修改这两个参数
set rlim_fd_max = 8192
set rlim_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 ———-
echo ulimit -n
ulimit -n
echo ———-
这样,当启动weblogic server (尤其是managed server)时,会有如下log输出到标准输出中:
———-
ulimit -n
8192
———-
示例:
-bash-3.00# ./startWebLogic.sh
.
.
JAVA Memory arguments: -Xms128m -Xmx128m -XX:CompileThreshold=8000 -XX:PermSize=48m -XX:MaxPermSize=128m
.
WLS Start 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
———-
starting weblogic with Java version:
java version “1.5.0_17″
Java(TM) Platform, Standard Edition for Business (build 1.5.0_17-b04)
Java HotSpot(TM) Client VM (build 1.5.0_17-b04, mixed mode, sharing)
Starting WLS with line:
/usr/jdk/instances/jdk1.5.0/bin/java -client -Xms128m -Xmx128m -XX:CompileThreshold=8000 -XX:PermSize=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
<Dec 29, 2009 3:15:19 PM EST> <Notice> <WebLogicServer> <BEA-000395> <Following extensions directory contents added to the end of 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>
<Dec 29, 2009 3:15:20 PM EST> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) Client VM Version 1.5.0_17-b04 from Sun Microsystems Inc.>
<Dec 29, 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 >
<Dec 29, 2009 3:15:28 PM EST> <Info> <WebLogicServer> <BEA-000215> <Loaded License : /opt/bea9/license.bea>
<Dec 29, 2009 3:15:28 PM EST> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING>
到此,参数修改成功,一般推荐的值是8192.