以编程方式测量瞬态存储器和性能

时间:2011-05-04 06:08:32

标签: java performance memory-management

我们有一个应用程序,我们有一个用例来测试应用程序性能。我们针对当前使用的构建运行候选构建,并比较统计数据,例如不同操作所花费的时间,操作的内存消耗以及各种其他常规指标,如总堆大小等...

我的问题是在操作过程中测量瞬态存储器。我们观察到波动(太多不可靠)。我正在使用JMX并以1秒的间隔轮询JMX bean ...

我们尝试过的一个问题(仍在测试)是将轮询时间减少到10毫秒。不确定这是否有帮助...

任何人都有其他更好的想法或遇到过同样的问题吗?

谢谢, Kichu

2 个答案:

答案 0 :(得分:0)

试试logging garbage collection。这将在gc发生时打印出一条消息,您可以使用该消息查看程序正在使用多少内存。

这是输出的一个例子,

  

[GC 19062K-> 7172K(60800K),0.0087190秒]

     

[GC 9346K-> 7525K(60800K),0.0052810秒]

     

[完整GC 7525K-> 7477K(60800K),0.0615190秒]

答案 1 :(得分:0)

另一个可能有用的工具是jstat。这会定期记录每个世代空间消耗的内存量以及执行GC的原因。

然而,听起来你正在创造如此多的垃圾,工具会给你带来嘈杂的信息。最好的工具听起来像使用内存分析器,它将为您提供有关对象分配和内存消耗的更多详细信息。我建议您在eval上尝试YourKit并查看对象分配热点,并尝试减少您创建的对象数量。