使用JSON -eval在Wso2 ESB 4.8中的OutofMemory问题

时间:2015-02-02 18:56:44

标签: wso2esb

我们使用smooks将CSV转换为XML,然后将XML转换为JSON。这是使用以下组件

在Wso2 esb 4.8.1中按顺序完成的
  1. Smooks mediator将csv转换为xml
  2. 然后json-eval将xml转换为json
  3. 我们在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或任何其他参数/​​选项可以帮助。

1 个答案:

答案 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需要进行微调。

感谢是否有人可以分享任何相同的内容。

谢谢, 美国之音。