使用RabbitMQ和Spring AMQP,我有一个Java应用程序,其中包含一些@RabbitListener
。这些使用者收听队列并非常快速地处理消息。我很想知道该应用程序随时间变化的内存行为(我将通过诸如JMeter之类的工具提供负载测试)。
我的问题是关于方法。首先,我不是Java内存模型的专家。以我的理解,我必须参考使用的Java堆内存,以查看随着时间的推移,处理消息在我的应用程序中消耗了多少内存。它是否正确?还有其他相关指标吗?
第二,由于Java垃圾收集器,在垃圾收集器启动并执行其工作,释放内存并更新已使用的内存堆之前,会存在一些延迟。如果我运行一个简短的测试,例如持续不到一分钟的测试,那么我可以保证垃圾收集器会足够频繁地启动,以至于我可以看到内存大小变化的结果(我不想看到恒定的内存)随着时间的流逝)?
答案 0 :(得分:1)
堆的大小和分配率定义了GC运行的方式/时间。从大约256MB的小堆大小开始。只需运行测试至少15分钟,因为存在不同类型的垃圾收集阶段。
https://blog.codecentric.de/en/2014/01/useful-jvm-flags-part-8-gc-logging/
您将要启用GC日志并将其加载到https://gceasy.io/中进行分析。
您可以做很多事情来调整GC的行为以获得所需的性能特征。 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/