CXF+Spring多线程访问异常

H~~~ 2010-02-24 11:52:06
我用CXF2.2.5和Spring2.5.5开发web service,我用80以内个线程访问这个web service没有问题,当线程数提高到100时,报以下异常:

Exception in thread "Thread-66" Exception in thread "Thread-9" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Failed to import bean definitions from URL location [classpath:META-INF/cxf/cxf.xml]
Offending resource: class path resource [beans-client.xml]; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)
at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:76)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:182)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:147)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:132)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:212)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:113)
at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:80)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:423)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:353)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
at com.game.sohu.client.Client.getClient(Client.java:23)
at com.game.sohu.client.ThreadTest.run(ThreadTest.java:18)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [META-INF/cxf/cxf.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:174)
... 20 more
Caused by: java.lang.OutOfMemoryError: Java heap space
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:96)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMBinOp.calcFirstPos(XSCMBinOp.java:127)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSCMUniOp.calcFirstPos(XSCMUniOp.java:118)
at com.sun.org.apache.xerces.internal.impl.dtd.models.CMNode.firstPos(CMNode.java:97)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSDFACM.calcFollowList(XSDFACM.java:745)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSDFACM.calcFollowList(XSDFACM.java:716)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSDFACM.calcFollowList(XSDFACM.java:715)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSDFACM.buildDFA(XSDFACM.java:438)
at com.sun.org.apache.xerces.internal.impl.xs.models.XSDFACM.<init>(XSDFACM.java:222)
at com.sun.org.apache.xerces.internal.impl.xs.models.CMBuilder.createDFACM(CMBuilder.java:171)
at com.sun.org.apache.xerces.internal.impl.xs.models.CMBuilder.getContentModel(CMBuilder.java:131)
at com.sun.org.apache.xerces.internal.impl.xs.XSComplexTypeDecl.getContentModel(XSComplexTypeDecl.java:185)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2065)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.emptyElement(XMLSchemaValidator.java:725)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:322)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:250)


我觉得有可能是我获取bean的方式占用了过多的资源导致的,我是用
new ClassPathXmlApplicationContext("beans-client.xml" ).getBean("beanName");
方式获得bean的,但是我没有想到好的解决办法。我把系统变量JAVA_OPTS设置为-Xms64m -Xmx1024m没有解决问题(我的内存是2G)。
...全文
1194 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
H~~~ 2010-02-27
  • 打赏
  • 举报
回复
引用 7 楼 nickycheng 的回复:
多半是你程序自身有内存泄露问题吧。没代码也不好帮你看,只能自己用jprofile看看到底在哪儿有问题。


没有找到问题的根本原因,但是我用线程池来缓冲,解决了问题。还是很感谢你的!分数都给你~
nickycheng 2010-02-25
  • 打赏
  • 举报
回复
多半是你程序自身有内存泄露问题吧。没代码也不好帮你看,只能自己用jprofile看看到底在哪儿有问题。
H~~~ 2010-02-25
  • 打赏
  • 举报
回复

for (int i = 0; i < 180; i++) {
new ThreadTest("线程"+i).start();
}


180线程并行请求一次,像上面那样~
nickycheng 2010-02-25
  • 打赏
  • 举报
回复
180线程并行什么概念。是不停的在请求,还是180线程每个线程只请求一次?
H~~~ 2010-02-25
  • 打赏
  • 举报
回复
程序现在可以并行180个线程没有出现问题,由于该程序以后会承载很大的压力,到200线程的时候就会出现2楼的异常,请大家帮帮忙!
nickycheng 2010-02-24
  • 打赏
  • 举报
回复
factory肯定只能创建一次的。你多次创建那是不对的。

public class BeanUtils {

public static BeanFactory factory = new ClassPathXmlApplicationContext("beans-client.xml");

public static Object getBean() {
factory.getBean("beanName")
}
}

如果在web容器中,应该还可以在web载入时装载,然后通过
WebApplicationContext wac =
WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
this.proxy = (Servlet)wac.getBean(targetBean);
a24334784 2010-02-24
  • 打赏
  • 举报
回复
只晓得是内存溢出,看样子是程序的问题,可惜看不懂,友情帮顶,坐等高人来解决
H~~~ 2010-02-24
  • 打赏
  • 举报
回复
引用 1 楼 nickycheng 的回复:
factory肯定只能创建一次的。你多次创建那是不对的。

public class BeanUtils {

  public static BeanFactory factory = new ClassPathXmlApplicationContext("beans-client.xml");

  public static Object getBean() {
    factory.getBean("beanName")
  }
}

如果在web容器中,应该还可以在web载入时装载,然后通过
WebApplicationContext wac =
  WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
  this.proxy = (Servlet)wac.getBean(targetBean);


我做了以下修改:

static {
context = new ClassPathXmlApplicationContext("beans-client.xml" );

}

现在并发量提高了,但是有时会出现以下异常:

javax.xml.ws.soap.SOAPFaultException: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <html>
<head><title>500 Servlet Exception</title></head>
<body>
<h1>500 Servlet Exception</h1>
<code><pre>
<script language='javascript' type='text/javascript'>
function show() { document.getElementById('trace').style.display = ''; }
</script>
<a style="text-decoration" href="javascript:show();">[show]</a> java.lang.OutOfMemoryError: Java heap space
<span id="trace" style="display:none">
java.lang.OutOfMemoryError: Java heap space
</span>
</pre></code>
</body></html>

at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
at $Proxy44.send(Unknown Source)
at com.game.sohu.client.ThreadTest.run(ThreadTest.java:18)
Caused by: org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <html>
<head><title>500 Servlet Exception</title></head>
<body>
<h1>500 Servlet Exception</h1>
<code><pre>
<script language='javascript' type='text/javascript'>
function show() { document.getElementById('trace').style.display = ''; }
</script>
<a style="text-decoration" href="javascript:show();">[show]</a> java.lang.OutOfMemoryError: Java heap space
<span id="trace" style="display:none">
java.lang.OutOfMemoryError: Java heap space
</span>
</pre></code>
</body></html>

at org.apache.cxf.interceptor.StaxInInterceptor.handleMessage(StaxInInterceptor.java:77)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:671)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2177)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2057)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1982)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:637)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:483)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:309)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:261)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
... 2 more

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧