浏览 5679 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-08-05
采用robot对系统应用做压力测试,在300个并发用户发现系统出问题,发现很奇怪的问题,webwork中的VelocityResult中pageContext初始化失败,抛空指针,异常如下: java.lang.NullPointerException at weblogic.servlet.jsp.PageContextImpl.initialize(PageContextImpl.java57) at weblogic.servlet.jsp.PageContextImpl.<init>(PageContextImpl.java:104 at weblogic.servlet.jsp.JspFactoryImpl.getPageContext(JspFactoryImpl.java:37) at com.opensymphony.webwork.dispatcher.VelocityResult.doExecute(VelocitResult.java:68) at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WeborkResultSupport.java:116) at com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultctionInvocation.java:263) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:187) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(ArounInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(ArounInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(ArounInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(ArounInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(ArounInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.huawei.nsm.dutymgt.ui.PriviInterceptor.intercept(PriviInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionIvocation.java:165) at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxyjava:115) at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:229) at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServleDispatcher.java:199) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 我查看了VelocityResult的源码: 出问题的代码如下: pageContext = jspFactory.getPageContext(servlet, request, response, null, true, 8192, true); ActionContext.getContext().put(ServletActionContext.PAGE_CONTEXT, pageContext); weblogic版本为weblogic8.1+sp4 webwork版本为 2.1.6 出这种问题很头疼,请各位帮忙一起研究研究。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-08-05
300个并发单个WebLogic实例也就差不多快到极限了,出点错误也不奇怪。看起来不是webwork的错误,而是过高并发情况下,HTTP请求和响应过于繁忙,处理不过来导致的。
|
|
返回顶楼 | |
发表时间:2005-08-05
关键是一旦出了问题,应用就不能再使用,所有采用velocity视图的action都不能再使用,这是非常致命的。
生产环境是cluster ,并且做了负载均衡(硬件实现),有4个server,实际每个server并发的用户数最多100,每个server分配内存为2G,server中的配置 thread count=30 Queue length=65536(系统) 硬件上应该没问题。 |
|
返回顶楼 | |
发表时间:2005-08-05
你这个错误怎么看都不是webwork的问题,而应该是weblogic的问题:
pageContext = jspFactory.getPageContext(servlet, request, response, null, true, 8192, true);; webwork的这行代码中引用的jspFactory只是一个interface,是Servlet API的interface,具体实现类由应用服务器去实现这个jspFactory接口,而显然当webwork调用这个jspFactory接口的getPageContext方法的时候,实际上执行的是Webloigc实现的jspFactory接口实现类的相应方法: weblogic.servlet.jsp.JspFactoryImpl.getPageContext(...); 而你的PageContext接口的实现类weblogic.servlet.jsp.PageContextImpl进行初始化的时候就失败了,这很明显是WebLogic在进行页面初始化的时候出错。我的初步判断就是过高并发导致的WebLogic初始化页面失败。解决方案就是找BEA的工程师,他们的技术支持还是做得很不错的。 |
|
返回顶楼 | |
发表时间:2005-08-05
我基本上也是这麽认为,应该是weblogic在并发下初始化页面出异常,
但也担心是不是webwork调用getPageContext方法时设置的参数有问题。 已经和bea的技术支持联系,希望能早点解决,谢谢robbin。 |
|
返回顶楼 | |
发表时间:2005-08-05
beauty_beast 写道 我基本上也是这麽认为,应该是weblogic在并发下初始化页面出异常,
但也担心是不是webwork调用getPageContext方法时设置的参数有问题。 已经和bea的技术支持联系,希望能早点解决,谢谢robbin。 这个倒也不是没有可能的。不过webwork传入的几个参数的servlet,request,response就是很简单的在DispatcherServlet里面放进ServletContext,然后再Result里面取出,感觉上不可能在这个环节中出问题。 |
|
返回顶楼 | |
发表时间:2005-08-08
反编译weblogic的class看了一下,跟踪定位发现Servlet实例调用getServletConfig()方法居然为空,但Servlet实例不为空,真的很纳闷,这都是容器管理的,怎么会为空,bea的技术支持也从没遇到过这种问题。
|
|
返回顶楼 | |