2

在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

谢谢

4

2 回答 2

2

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

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

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

于 2012-05-22T15:30:29.810 回答
0

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

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

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

于 2013-01-05T08:38:37.683 回答