论坛首页 Java企业应用论坛

webwork在weblogic下压力测试下出现的问题

浏览 5680 次
精华帖 (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
出这种问题很头疼,请各位帮忙一起研究研究。
   发表时间:2005-08-05  
300个并发单个WebLogic实例也就差不多快到极限了,出点错误也不奇怪。看起来不是webwork的错误,而是过高并发情况下,HTTP请求和响应过于繁忙,处理不过来导致的。
0 请登录后投票
   发表时间:2005-08-05  
关键是一旦出了问题,应用就不能再使用,所有采用velocity视图的action都不能再使用,这是非常致命的。
生产环境是cluster ,并且做了负载均衡(硬件实现),有4个server,实际每个server并发的用户数最多100,每个server分配内存为2G,server中的配置
thread count=30
Queue length=65536(系统)
硬件上应该没问题。
0 请登录后投票
   发表时间: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的工程师,他们的技术支持还是做得很不错的。
0 请登录后投票
   发表时间:2005-08-05  
我基本上也是这麽认为,应该是weblogic在并发下初始化页面出异常,
但也担心是不是webwork调用getPageContext方法时设置的参数有问题。
已经和bea的技术支持联系,希望能早点解决,谢谢robbin。
0 请登录后投票
   发表时间:2005-08-05  
beauty_beast 写道
我基本上也是这麽认为,应该是weblogic在并发下初始化页面出异常,
但也担心是不是webwork调用getPageContext方法时设置的参数有问题。
已经和bea的技术支持联系,希望能早点解决,谢谢robbin。


这个倒也不是没有可能的。不过webwork传入的几个参数的servlet,request,response就是很简单的在DispatcherServlet里面放进ServletContext,然后再Result里面取出,感觉上不可能在这个环节中出问题。
0 请登录后投票
   发表时间:2005-08-08  
反编译weblogic的class看了一下,跟踪定位发现Servlet实例调用getServletConfig()方法居然为空,但Servlet实例不为空,真的很纳闷,这都是容器管理的,怎么会为空,bea的技术支持也从没遇到过这种问题。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics