我们使用smooks将CSV转换为XML,然后将XML转换为JSON。这是使用以下组件
在Wso2 esb 4.8.1中按顺序完成的我们在csv中有100000条记录,使用迭代器在50个线程中并行完成转换。
第一次启动wso2 esb服务器时,它执行正常。但是第二次运行,即在5分钟的休息时间。我们得到以下错误。
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:203)
at java.lang.StringBuffer.toString(StringBuffer.java:561)
at java.io.StringWriter.toString(StringWriter.java:210)
at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:996)
at org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(SynapseXPath.java:321)
at org.apache.synapse.mediators.MediatorProperty.getEvaluatedExpression(MediatorProperty.java:138)
at org.apache.synapse.mediators.builtin.LogMediator.setCustomProperties(LogMediator.java:192)
at org.apache.synapse.mediators.builtin.LogMediator.getCustomLogMessage(LogMediator.java:131)
at org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:117)
at org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:97)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
at org.apache.synapse.mediators.MediatorWorker.run(MediatorWorker.java:69)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
我们已经遵循了wso2 esb 4.8.1的性能调整参数 感谢是否有人可以告诉我们如果调整xpath或smooks或任何其他参数/选项可以帮助。
答案 0 :(得分:0)
我们使用jprofiler进行了分析。附上相同的快照。我们的测试证明,当我们删除用于将xml转换为json的json-eval时,我们不会因byte []和char []而导致内存泄漏。 我无法通过jprofiler的形象。 然而evey运行我们的esb服务,使用json-eval进行xml到json的转换。我们看到byte []和char []在jprofiler中得到了构建。当我们改变我们的解决方案以避免使用json-eval时,这些对象不再可见,内存看起来非常好。 但是在我们的解决方案中,我们需要在呈现服务的响应之前将hug xml转换为json,因此需要使用像json-eval这样的转换。
理想情况下,我们怀疑使用json-eval将巨大的xml转换为json需要进行微调。
感谢是否有人可以分享任何相同的内容。
谢谢, 美国之音。