【问题标题】:OutofMemory issue in Wso2 ESB 4.8 using JSON -eval使用 JSON -eval 的 Wso2 ESB 4.8 中的 OutofMemory 问题
【发布时间】:2015-02-02 18:56:43
【问题描述】:

我们使用 smooks 将 CSV 转换为 XML,然后将 XML 转换为 JSON。这是在 Wso2 esb 4.8.1 中使用以下组件按顺序完成的

  1. Smooks 调解器将 csv 转换为 xml
  2. 然后 json-eval 将 xml 转换为 json

我们在 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 或任何其他参数/​​选项是否有帮助。

【问题讨论】:

  • 仅从堆栈跟踪我们无法推断 xpath 是 OOM 的原因 - 内存可能由于其他原因而增长,并且更有可能在 xPath 评估期间发生 OOM。您应该分析 ESB 以找出所有内存的去向并考虑您的 JVM 内存设置,它是否足以满足您正在处理的负载?

标签: wso2esb


【解决方案1】:

我们已经使用 jprofiler 进行了分析。附上相同的快照。我们的测试证明,当我们删除用于将 xml 转换为 json 的 json-eval 时,我们不会因为 byte[] 和 char[] 而导致内存泄漏。 我无法通过 jprofiler 的图像。 然而,我们的 esb 服务的每一次运行都使用 json-eval 将 xml 转换为 json。我们看到 byte[] 和 char[] 在 jprofiler 中逐渐增加。当我们更改我们的解决方案以避免使用 json-eval 时,这些对象不再可见并且内存看起来相当不错。 然而,在我们的解决方案中,我们需要在服务响应被渲染之前将 hug xml 转换为 json,因此需要使用像 json-eval 这样的转换。

理想情况下,我们怀疑使用 json-eval 将巨大的 xml 转换为 json 需要进行微调。

感谢是否有人可以分享任何见解。

谢谢, 安佳娜。

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多