在使用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
感谢
答案 0 :(得分:2)
对于Mule收到的每个请求,都会创建大量对象(会话,事件,消息,在许多地方充当闭包的匿名类)。
此外,某些传输可能会创建更少的其他传输对象,具体取决于他们的技术需求(例如,HTTP将创建额外的对象来存储标头,cookie ......)。
所以这不是一个错误,但我不能说它也是一个功能。而且我认为减少每个请求创建的对象数量对于Mule来说是一个很好的主动......
答案 1 :(得分:0)
您不应该使用jProfiler来衡量应用程序的分配率。 jPRofiler会影响应用程序的性能,并且会产生巨大的开销。
您应该使用 gc-logging / jmap / jstat 或其他工具来观察并计算应用程序的真实内存统计信息。
然后,您可以在具有中等工作负载的应用上使用jProfiler来分析和研究堆分配。