xfire web service导致cpu100%问题分析

来源:互联网 发布:如何雇佣网络水军 编辑:程序博客网 时间:2024/04/19 23:49

最近遇到一个遗留系统出现CPU经常出现100%的情况,且必须重启应用服务器才能解决,

线程的dump为:


"http-9099-Processor167" daemon prio=10 tid=0x00007f7fbc07e000 nid=0x9506 runnable [0x00007f7f248c1000]
   java.lang.Thread.State: RUNNABLE
at com.sun.xml.stream.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:876)
at com.sun.xml.stream.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:353)
at com.sun.xml.stream.XMLReaderImpl.next(XMLReaderImpl.java:557)
at org.codehaus.xfire.soap.handler.ReadHeadersHandler.invoke(ReadHeadersHandler.java:44)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)


报错来自由xfire编写的web service,具体为对XML的解析,com.sun.xml.stream这个包是由sun的sjsxp包提供的具体实现,网上有类似的BUG报出,于是组了一段soap请求串,并将xml串故意写错,用jmeter压了一下,cpu很快上升到100%,并无法释放,看来原因是此包产生,换用其它实现,如:wstx,问题解决了。

初步结论为在网络传输中如果soap请求如果不完整,或者其它解析xml过程中抛了异常,sjsxp会导致cpu100%,并不释放。

看来sun出品的也不一定靠谱,注:sjsxp是很久以前编写的


特此记录

1 0
原创粉丝点击