18

您是否使用过eclipse中的MAT(Memory Analyzer Tool)。真的很酷。(1.5G堆转储文件kill jhat,ibm的带有OOME的堆转储分析器)。MAT 是活的、快速的、美丽的和强大的。

我想知道ehcahce key的内存大小是多少,所以在下面写oql。

SELECT c.key.@retainedHeapSize 
FROM net.sf.ehcache.store.compound.HashEntry c 

不幸的是,像 sum()、max()、min() 这样的组函数并不存在。我将总结果行(约 60,000)导出到 excel 文件并在 excel 表中求和。

你有关于使用组函数(如 sum())的提示或隐藏(?)函数/特性吗?

4

4 回答 4

13

You can generate a Histogram from the OQL results - select the "Show as Histogram" icon. From this histogram you can calculate the retained size using the "Calculate Precise Retained Set" icon.

于 2013-07-02T02:59:17.217 回答
9

据我从内存分析器文档中可以看出,它的 OQL 中没有聚合函数。

但是,在VisualVm(自 1.6 起包含在 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)')
于 2011-09-12T14:36:51.393 回答
1

似乎在 MAT 或 OQL 中没有办法做到这一点

但是,您可以通过其他方式做到这一点。

执行查询后,您可以将结果导出到 cvs 文件。然后你可以通过 excel sum 工具得到结果。

于 2018-10-25T07:16:48.947 回答
0

如果您更喜欢 MAT 而不是 Visual VM 并且不坚持使用 OQL,您也可以使用它的方解石插件 ( 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

于 2021-05-20T10:55:02.703 回答