- 浏览: 758955 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
lgh1992314:
a offset: 26b offset: 24c offse ...
java jvm字节占用空间分析 -
ls0609:
语音实现在线听书http://blog.csdn.net/ls ...
Android 语音输入API使用 -
wangli61289:
http://viralpatel-net-tutorials ...
Android 语音输入API使用 -
zxjlwt:
学习了素人派http://surenpi.com
velocity宏加载顺序 -
tt5753:
谢啦........
Lucene的IndexWriter初始化时的LockObtainFailedException的解决方法
public OfferInfo parseXml(String content) throws NumberFormatException, XMLStreamException { if (content == null || content.isEmpty()) { return null; } XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = null; try { reader = factory.createXMLStreamReader(new StringReader(content)); } catch (XMLStreamException e1) { return null; } if (reader == null) { return null; } OfferInfo offerInfo = new OfferInfo(); while (reader.hasNext()) { int event = 0; try { event = reader.nextTag(); } catch (Exception e) { } switch (event) { case XMLStreamConstants.START_ELEMENT: if (reader.getLocalName().equalsIgnoreCase(OFFER_ID)) { offerInfo.setOfferId(Long.parseLong(reader.getElementText())); } else if (reader.getLocalName().equalsIgnoreCase(MEMBER_ID)) { offerInfo.setMemberId(reader.getElementText()); } else if (reader.getLocalName().equalsIgnoreCase(ACTION)) { offerInfo.setAction(reader.getElementText()); } break; case XMLStreamConstants.END_ELEMENT: break; } //如果已经解析完需要的字段,则跳过剩余xml内容的解析,提高性能 if(offerInfo.getOfferId() != null && offerInfo.getMemberId() != null && offerInfo.getAction() != null){ return offerInfo; } } return offerInfo; }
这段代码的
try { event = reader.nextTag(); } catch (Exception e) { }居然能搞出一个死循环,导致cpu跟load飙升,yonggc非常频繁
初步诊断如下:
stax在调用reader的nextTag方法时,因为格式不对,导致抛异常,本来我是只需要xml内容的三个字段,我认为如果是其他字段解析有问题,我直接忽略,所以我没打印日志,也没有跳出xml解析,而是直接解析,因为对nextTag可能不熟悉,我要的功能跟nextTag提供的不匹配,导致抛出异常之后,我又调用了该方法,然后因为nextTag抛出异常之后没有忽略当前有问题的xml内容,导致下次调用时又回到有问题的xml起始位置继续处理,重复抛出异常,这样就成为死循环了。
之前两个多月应用一直没问题,由于没有打印日志所以也扑捉不到当时xml的内容。
这里需要做两个教训:1.打印日志,2调用API时一定要了解API的详细处理过程,避免错误调用API导致问题;3.对于出错时event初始参数可以进行判断是否出错了,进行处理。
从jstack里面打印出来10几个这样的线程信息
"ActiveMQ Session Task" prio=10 tid=0x00000000451b3000 nid=0x7db7 runnable [0x00000000429ff000] java.lang.Thread.State: RUNNABLE at java.util.Arrays.copyOf(Arrays.java:2882) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390) at java.lang.StringBuilder.append(StringBuilder.java:119) at javax.xml.stream.XMLStreamException.<init>(XMLStreamException.java:61) at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:594) at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1235) at com.alibaba.china.industry.brand.napoli.OfferNewReceiverWorker.parseXml(OfferNewReceiverWorker.java:195)"ActiveMQ Session Task" prio=10 tid=0x0000000046892000 nid=0x7baf runnable [0x0000000040a72000]
java.lang.Thread.State: RUNNABLE at java.lang.StringBuffer.toString(StringBuffer.java:585) - locked <0x000000078890bc10> (a java.lang.StringBuffer) at java.text.MessageFormat.makeFormat(MessageFormat.java:1337) at java.text.MessageFormat.applyPattern(MessageFormat.java:458) at java.text.MessageFormat.<init>(MessageFormat.java:350) at java.text.MessageFormat.format(MessageFormat.java:811) at com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter.formatMessage(XMLMessageFormatter.java:85) at com.sun.xml.internal.stream.StaxErrorReporter.reportError(StaxErrorReporter.java:95) at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(XMLDocumentFragmentScannerImpl.java:1690) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2985) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:554) at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1235)
发表评论
-
对字符串进行验证之前先进行规范化
2013-09-17 23:18 13967对字符串进行验证之前先进行规范化 应用系统中经常对字 ... -
使用telnet连接到基于spring的应用上执行容器中的bean的任意方法
2013-08-08 09:17 1493使用telnet连接到基于spring的应用上执行容器中 ... -
jdk7和8的一些新特性介绍
2013-07-06 16:07 10123更多ppt内容请查看:htt ... -
java对于接口和抽象类的代理实现,不需要有具体实现类
2013-06-12 09:50 2965原文链接:http://www.javaarch.net/j ... -
Java EE 7中对WebSocket 1.0的支持
2013-06-05 09:27 3854原文链接:http://www.javaarch.n ... -
Java Web使用swfobject调用flex图表
2013-05-28 19:05 1137Java Web使用swfobject调用 ... -
spring使用PropertyPlaceholderConfigurer扩展来满足不同环境的参数配置
2013-05-21 15:57 3349spring使用PropertyPlaceholderCon ... -
java国际化
2013-05-20 20:57 4483java国际化 本文来自:http://www.j ... -
RSS feeds with Java
2013-05-20 20:52 1237RSS feeds with Java 原文来自:htt ... -
使用ibatis将数据库从oracle迁移到mysql的几个修改点
2013-04-29 10:40 1687我们项目在公司的大战略下需要从oracle ... -
线上机器jvm dump分析脚本
2013-04-19 10:48 2918#!/bin/sh DUMP_PIDS=`p ... -
eclipse远程部署,静态文件实时同步插件
2013-04-06 20:18 5477eclipse 远程文件实时同步,eclipse远程 ... -
java价格处理的一个问题
2013-03-26 21:21 1843我们经常会处理一些价格,比如从运营上传的文件中将某 ... -
java 服务降级开关设计思路
2013-03-23 16:35 3776java 服务屏蔽开关系统,可以手工降级服务,关闭服 ... -
poi解析excel内存溢出
2013-03-20 22:21 6414真是悲剧啊,一个破内部使用系统20多个人使用的后 ... -
简单web安全框架
2013-03-16 11:56 1558web安全框架,主要用servlet filter方 ... -
基于servlet的简单的页面缓存框架
2013-03-11 19:27 1226基于servlet的页面级缓存框架的基本用法: 代码参考: ... -
Eclipse使用过程中出现java.lang.NoClassDefFoundError的解决方案
2013-02-01 17:22 1614如果jdk,classpath设置正确,突然在eclipse ... -
jetty对于包的加载顺序的处理
2013-01-28 22:58 41561.问题 今天在本地和测试环境用jet ... -
hsqldb源码分析系列6之事务处理
2013-01-20 15:20 1719在session的 public Result ...
相关推荐
- Java中的解析XML的库,如DOM、SAX和StAX解析器。 - JSON对象和JSON数组的Java表示,如JSONObject和JSONArray类(来自org.json库)。 - 将Java对象序列化为JSON和反序列化为Java对象的方法。 通过学习这些文档...
- **知识点解析**:在Java中,每个源代码文件编译后都会生成一个对应的`.class`文件。这个过程是由Java编译器完成的。`.class`文件包含了类的字节码,这些字节码可以在Java虚拟机(JVM)上运行。因此,可以判断此说法...
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,...
11. **XML解析**:DOM、SAX和StAX是三种解析方式,DOM一次性加载整个文档,适合小文件;SAX事件驱动,只读取所需部分,适合大文件;StAX是流式解析,允许前后移动。 12. **权限控制**:Java的public、protected、...
35. XML解析:DOM、SAX和StAX,XML约束如DTD、XSD。 36. SQL查询:使用子查询或窗口函数(如RANK())获取部门前两名员工。 37. 面向对象特征:封装、继承、多态。 38. Math.round():向上或向下取整,11.5变为12...
XML解析方式** - **DOM**(Document Object Model):将XML文档解析为树形结构。 - **SAX**(Simple API for XML):逐行解析XML文档。 - **StAX**(Streaming API for XML):流式解析XML文档。 **50. Statement...