您是否使用过eclipse的MAT(Memory Analyzer Tool)。 它真的很酷。(1.5G堆转储文件kill jhat,ibm的堆转储分析器与OOME)。 MAT活着,快速,美丽,强大。
我想知道ehcahce键的内存大小是多少,所以写下面的oql。
SELECT c.key.@retainedHeapSize
FROM net.sf.ehcache.store.compound.HashEntry c
不幸的是,sum(),max(),min()这样的组函数不存在。 我将总结果行(约60,000)导出到excel文件并在excel表中汇总。
您是否有关于使用组功能的提示或隐藏(?)功能/功能(如sum())?
答案 0 :(得分:8)
据Memory Analyzer文档我所知,它的OQL中没有聚合函数。
但是,在VisualVm(自1.6以及downloadable as a standalone application以来的JDK中包含)中,您可以这样做:
select sum(heap.objects('net.sf.ehcache.store.compound.HashEntry'), 'rsizeof(it)')
或者,如果您想要浅尺寸而不是保留尺寸 - 将“rsizeof”更改为“sizeof”:
select sum(heap.objects('net.sf.ehcache.store.compound.HashEntry'), 'sizeof(it)')
答案 1 :(得分:3)
您可以从OQL结果生成直方图 - 选择“显示为直方图”图标。 在此直方图中,您可以使用“计算精确保留的设置”图标计算保留的大小。
答案 2 :(得分:0)
似乎没有办法在MAT或OQL中做到这一点
但是您可以通过其他方式来做到。
执行查询后,可以将结果导出到cvs文件。那么您可以通过excel sum工具获得结果。
答案 3 :(得分:0)
如果您更喜欢 MAT 而不是 Visual VM,并且不坚持使用 OQL,您也可以使用它的 calcite 插件 (https://github.com/vlsi/mat-calcite-plugin)。
求和的一个例子是:
SELECT sum(retainedSize(n.this['key']))
FROM "java.util.HashMap$Node" n
您可以在此处将其功能与 oql 进行比较:https://wiki.eclipse.org/MemoryAnalyzer/OQL#OQL_.28Memory_Analyzer.29_versus_SQL_.28MAT.2FCalcite.29