最近一个web模块在做性能测试,用lr一压,发现tps很低,还不到15。
问题很严重,虽然达到了需求中规定的要求,但是发现实在有点对不起观众。
决定对代码进行分析,我开始一段的一段的进行分析,查看执行时间。后来老大用jprofile分析,更快,看样子我有点土了。
很快我把问题定位在xml的序列化上,因为请求的参数都是xml报文,而我们使用的是castor来进行反序列化和序列化。发现消耗在这段的时间占总时间的一半,感觉不对劲。
后来我就直接写了个简单的测试例子,用jmeter来压,也很慢,然后我找网上的xstream来做同样的事情,性能比这个高10倍左右,看样子是castor对多线程支持不好,高并发下性能不行。
对比castor和XStream两个开源的组件序列化和反序列化xml的性能。
部署在weblogic上的例子,100个线程循环100次,以下是使用jmeter测试后的聚合报告截图:
castor:
XStream:
xstream的throughput的值最高能达到300.
通过对比,可以发现castor的性能存在问题。
后来察看castor的文档,发现在个文档(xml-best-practice.html)有对性能说明;
主要是说要对Descriptor classes 这种对象进行缓存,还好castor有这种机制,只要使用
XMLContext对象来创建(Un)Marshaller实例就行。具体看下面的代码:
private final static XMLContext xmlContext;
static {
xmlContext = new XMLContext();
try {
/**
* 请确保以下的目录下面有.castor.cdr这样的文件存在,
* 否则cache将不起作用
*/
xmlContext.addPackages(new String[]{"com.asiainfo.aidmccsupport.boss",
"com.asiainfo.aidmccsupport.boss.operate",
"com.asiainfo.aidmccsupport.boss.query"});
xmlContext.setProperty("ReuseObjects", true);
} catch (ResolverException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
本Dll提供了二进制序列化和Xml序列化,序列化之后,可以对序列化数据,进行压缩。本dll提供了两种压缩方式,GZipStream和DeflateStream,在使用Webservice作为服务端的系统中,提高传输性能是比较关键的,而提高传输...
XSerializer的XML序列化处理System.Xml.Serialization.XmlSerializer无法处理的属性和类型,例如接口和字典。 它是BCL XmlSerializer的直接替代品-它使用相同的属性:[XmlElement],[XmlAttribute]等。 // Create ...
提出了一种基于JSON的对象序列化算法,该算法通过分析JSON文法并建立对象导航图,透明地将Java对象序列化成JSON表达式,使客户端能够很好地利用JavaScript引擎来解析JSON响应,有效地解决了解析XML所造成的缺陷。
具体请看http://blog.csdn.net/luq885/archive/2007/05/10/1603330.aspx<br>其中JSonConvert.cs中xml-2-json.xsl文件的路径是固定的,请自行修改
具官方说法使用PB 进行序列化和反序列化性能是xml序列化和反序列化的20~100倍,在各种序列化和反序列化方式中,处于领先地位。 PB的序列化结果是字节与字节的连接,省略了字段名称,在存储上也比其他方式要小,更...
该项目测试了以下go序列化器,并将其与go standard json和xml进行了比较。 排除的序列化器 鉴于存在电音,复杂性或活动性的,以下串行器由于其性能较差而被排除在本测试之外。 测试环境 Go版本: 1.13.4 测试: go...
ONCEXMLEditor具有高效的XML验证和序列化性能,同时提供给用户多种功能,包括按需遍历文档、提供上下文感知的编写环境、实时纠错、灵活的装载和序列化机制等。描述了ONCEXMLEditor的体系结构及其实现核心算法,同时给出...
一个公认的实事,即关系型数据库在结构化的集合处理方面表现优秀,而数据库与编程语言之间通常通过各种参数来进行交互,而XML刚好是它们之间的一个桥梁,把编程语中向面对象的数据序列化为XML,传递到数据库,数据库...
JDOM(注意JDOM决不是DOM扩展,虽然名字差不多,但两者平行的关系 )是一个开源项目,它基于树型结构,利用纯JAVA的技术对XML文档实现解析、生成、序列化以及多种操作。JDOM的目的是成为Java特定文档模型,它简化与XML...
XStream是一个简单的基于Java库,Java对象序列化到XML,反之亦然(即:可以轻易的将Java对象和xml文档相互转换)。 特点 使用方便 - XStream的API提供了一个高层次外观,以简化常用的用例。 无需创建映射 - XStream的...
•提高web程序的性能 •减轻服务器和带宽的负担 Ajax的不足 •浏览器兼容不足 •破坏浏览器前进和后退按钮的正常功能 •对搜索引擎的支持不足 •开发和调试工具的 缺乏 好吧,这些都是几年前的不足。技术的发展...
NAXB ##Introduction .NET 属性 XML 绑定。 这是一个框架,允许您通过在属性上使用自定义属性指定 XPath 来将任何 XML 绑定到 .NET 对象。 该项目旨在解决一个已经通过多种方式解决的问题... 为了在序列化性能方面保持
Java到XML序列化,然后再返回 二进制文件 所有二进制工件都捆绑在-bin归档文件中。 它包括XStream jar和在构建时使用的任何其他库,或可选的运行时额外功能。 建议使用Xpp3,因为它将大大提高XStream的性能。 文献...
主要包括TCP接口服务框架,TCP函数服务框架,远程表达式链组件,前一体的WEB框架,ORM内存索引缓存框架,日志流内存数据库缓存组件,消息模块化组件,二进制JSON XML数据序列化等价无缝集成的高级组件
为网络的不确定性带来类型安全。... .NET Framework XML序列化器序列化/反序列化 多部分 流内容 如何使用 TypeSafe.Http.Net旨在易于使用。 使用反射,元数据或批注的现代概念,您可以准备.NET接口类型以成为REST
常见的序列化方式一、Protocol BufferProtocol Buffers(也称protobuf)是Google公司设计的一种独立于开发语言,独立于平台的可扩展的结构化数据序列机制。通俗点来讲它跟xml和json是一类。是一种数据交互格式协议。...
首先是找到了hibernate的启动优化 http://www.hibernate.org/194.html 里面的主要思想是通过将xml序列花到本地的文件里,每次读取的时候根据情况,从本地文件读取并反序列化,节省了hibernate xml的解析时间。
快速Ruby XML序列化,了解如何将Ox用作Marshal的快速替代品。 RubyGems上的快速JSON解析器和编组器: https : //rubygems.org/gems/oj GitHub上的快速JSON解析器和编组器: https : //github.com/ohler55/oj...
代替使用XML或JSON序列化,将数据集生成为Java语言。 此格式更适合于性能和重构目的。 技术支持 基本类型及其包装器类 枚举 馆藏与地图 数组(1维和2维) java.util.Date,java.sql.Date,日历,...
以XML序列化本机应用程序数据。 包括WSDL / XSD模式绑定和自动编码工具,存根/骨架编译器,与Apache模块和IIS扩展的Web服务器集成,具有模式验证的高性能XML处理,快速的MIME / MTOM流,SOAP和REST Web API开发,WS...