如何分析和修复 WSO2 API Manager 1.10 中 hazelcast 的堆转储问题?
How to analyze and fix heap dump problems for hazelcast in WSO2 API Manager 1.10?
我们的 WSO2 API Manager 1.10.0 设置有问题。我们使用集群设置,有 3 个网关工作节点和一个管理节点;单独的商店、发布者和密钥管理器节点(我们最近从 v1.8.0 更新到 1.10.0)。
升级后,每隔大约 2 周,我们所有的工作节点(有时还有其他节点)就会进行堆转储和崩溃(几乎同时发生)。
分析堆转储显示:
28,509 instances of "com.hazelcast.nio.tcp.WriteHandler", loaded by "hazelcast" occupy 945,814,400 (44.42%) bytes
28,509 instances of "com.hazelcast.nio.tcp.ReadHandler", loaded by "hazelcast" occupy 940,796,960 (44.18%) bytes
有线程:
com.hazelcast.nio.tcp.iobalancer.IOBalancerThread @ 0x7877eb628 hz.wso2.pubstore.domain.instance.IOBalancerThread Thread
我们无法找到补救措施。日志只告诉我们节点出现 OOM 异常。这发生在流量非常小的节点和流量非常大的节点上(不同的环境具有相同的行为)。
有人遇到过类似的行为吗?有什么前进的想法吗?
这确实是 Hazelcast 的内存泄漏问题。升级到更高版本后,此问题停止。
为了升级 Hazelcast,需要完成一些 "trickery"。
1) 在此处下载适用于您的特定 Hazelcast 版本的 WSO2 GitHub 存储库(或简单的 pom 文件):https://github.com/wso2/orbit/tree/master/hazelcast
2) 在 POM 的这一部分更改 Hazelcast 版本(到您的首选版本):
<properties>
<version.hazelcast>3.7.2</version.hazelcast>
</properties>
3) 构建包。
4) 将构建的包作为补丁部署到您的服务器。
这是一个 "work-around",因为它只能修补与产品随附的名称相同的组件。
我们的 WSO2 API Manager 1.10.0 设置有问题。我们使用集群设置,有 3 个网关工作节点和一个管理节点;单独的商店、发布者和密钥管理器节点(我们最近从 v1.8.0 更新到 1.10.0)。
升级后,每隔大约 2 周,我们所有的工作节点(有时还有其他节点)就会进行堆转储和崩溃(几乎同时发生)。
分析堆转储显示:
28,509 instances of "com.hazelcast.nio.tcp.WriteHandler", loaded by "hazelcast" occupy 945,814,400 (44.42%) bytes
28,509 instances of "com.hazelcast.nio.tcp.ReadHandler", loaded by "hazelcast" occupy 940,796,960 (44.18%) bytes
有线程:
com.hazelcast.nio.tcp.iobalancer.IOBalancerThread @ 0x7877eb628 hz.wso2.pubstore.domain.instance.IOBalancerThread Thread
我们无法找到补救措施。日志只告诉我们节点出现 OOM 异常。这发生在流量非常小的节点和流量非常大的节点上(不同的环境具有相同的行为)。
有人遇到过类似的行为吗?有什么前进的想法吗?
这确实是 Hazelcast 的内存泄漏问题。升级到更高版本后,此问题停止。
为了升级 Hazelcast,需要完成一些 "trickery"。
1) 在此处下载适用于您的特定 Hazelcast 版本的 WSO2 GitHub 存储库(或简单的 pom 文件):https://github.com/wso2/orbit/tree/master/hazelcast
2) 在 POM 的这一部分更改 Hazelcast 版本(到您的首选版本):
<properties>
<version.hazelcast>3.7.2</version.hazelcast>
</properties>
3) 构建包。
4) 将构建的包作为补丁部署到您的服务器。
这是一个 "work-around",因为它只能修补与产品随附的名称相同的组件。