使用Mule3.2在重载下GC过频

在Mule 3.2(100个线程同时发送请求)的重负载下,通过jprofiler,我可以看到创建了大量的对象实例(每秒大约500mb),并且占用了堆的年轻区域的90%以上的空间,这导致了jvm每2秒触发一次gc。

为什么? 这是正常的吗? 或者它是一个错误

jvm参数:

-Xms = 2048m -Xmx = 2048m -Xmn = 768m -XX:PermSize = 256m -XX:MaxPermSize = 512m -Xss256k -XX:+ UseConcMarkSweepGC

谢谢

对于Mule接收的每个请求,都会创建大量对象(会话,事件,消息,匿名类,在许多地方充当闭包)。

此外,某些传输可能会创建更少的其他传输对象,具体取决于他们的技术需求(例如,HTTP将创建额外的对象来存储标头,cookie ……)。

所以这不是一个错误,但我不能说这是一个function。 而且我认为减少每个请求创建的对象数量对于Mule来说是一个很好的举措……

您不应该使用jProfiler来测量应用程序的分配率。 jPRofiler会影响应用程序的性能,并且会产生巨大的开销。

您应该使用gc-logging / jmap / jstat或其他工具来观察并计算应用程序的真实内存统计信息。

然后,您可以在具有中等工作负载的应用程序上使用jProfiler来分析和研究堆分配。