wso2 axis2 OutOfMemory 一天几次

wso2 axis2 OutOfMemory few times a day

经常出现OOM错误的可能原因是什么?

在我们的开发环境中,我们有 3 个节点,主节点上的 VM 初始化为:Xms=3GB,Xmx=3GB。还定义了大约 30 个代理和 30 个端点。开发人员在白天不断加载他们的更改(汽车文件)而无需重新启动碳。一天冻结几次。也许不断的配置变化会杀死碳?在预生产环境中,carbon 完美运行:/

我进行了堆转储,'leak suspect report' 结果是:

One instance of "org.apache.axis2.context.ConfigurationContext" loaded by "axis2" occupies 661 590 744 (79,50%) bytes. The memory is accumulated in one instance of "java.util.concurrent.ConcurrentHashMap$Segment[]" loaded by "".

报告结果:

直方图:

冻结的发生主要是由于系统中发生了完整的 gc 循环,您可以更改 gc 设置以进行正确的 gc 配置

对于典型部署,wso2 建议具有以下 GC 配置。 -Xms512m -Xmx2048m -XX:MaxPermSize=1024m 由于您使用的是 3gb 内存,因此您必须根据您的情况进行调整。您可以参考 https://docs.wso2.com/display/CLUSTER44x/Production+Deployment+Guidelines 了解有关部署的更多信息

由于您使用的是 Xms=3GB,Xmx=3GB,所以它有可能会等到整个 3GB 被填满,然后进行完整的 gc 循环。因此最好将 Xms 值调整到 1gb 左右,这样它会激发较小的 gc 周期并清理不必要的东西,而不是等待完整的 gc

根据堆转储,大部分保留堆被 ConfigurationContext 实例占用。所以这个 OOM 问题似乎是由于您的开发系统中的配置负载过重而发生的。可能是由于许多开发人员频繁部署的大型 capps。由于该事件不会发生在您的生产中,因此 ESB 永远不会 OOM。

感谢和问候, 拉文德拉.