【问题标题】:wso2 esb out of memory when clients disconnects客户端断开连接时 wso2 esb 内存不足
【发布时间】:2015-05-17 05:34:58
【问题描述】:

我有一个运行着一些代理的 wso2esb 4.8.0。

在调用代理的客户端在收到来自 esb 的响应之前开始断开连接之前,一切正常。

几分钟后,ESB 出现内存不足错误。

请求的平均大小为:1.2 Kb。 响应的平均大小为:1.6 Mb。

服务器正在运行:-Xms256m -Xmx1024m -XX:MaxPermSize=256m。

在堆转储中,我可以看到保留内存的主要类是 java.lang.Thread (PassThroghtMessageProcessor),很多都是大小为 36Mb。

有时也会出现这个错误:java.lang.OutOfMemoryError: GC overhead limit exceeded

如果客户端不断开连接一切正常。

有什么想法吗?

【问题讨论】:

    标签: out-of-memory wso2esb


    【解决方案1】:

    如果客户端断开连接,可能根本原因是您的后端响应时间过长。

    你可以做几件事:

    1. 减少后端响应的超时时间,这样消息就不会堆积在 ESB 上

    2. 使用限制中介或处理程序来拒绝超过特定速率的消息。

    两者都针对症状(在 ESB 上)。除此之外,可能需要重新设计集成模型,可能使用存储转发方法。

    【讨论】:

    • 任何更智能的解决方案?
    • 不确定“更智能”是什么意思,但更实用的方法是增加堆内存量。将 -Xmx 参数的值更改为 -Xms4096m 之类的值,看看问题是否仍然存在。
    • 问题在于 ws 安全性,别名壁垒。我删除了代理中的 ,现在一切运行良好。当然这不是解决办法,我得明白为什么rampart会保留内存,祝你好运:-(
    • 尝试用 NHTTP 传输替换 PassThrough 传输。前者的主要好处是它可以转发消息而无需将其构建在内存中。由于您启用了安全性,这不再可能,因为垒必须将完整的消息内容读入内存才能验证它。要更改传输,您必须编辑位于 repository/conf/axis2 文件夹中的 axis2.xml 文件。在标准发行版中有一个axis2_nhttp.xml 文件,您可以按原样使用。只需将其重命名为axis2.xml 并重新启动ESB
    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多