我正在使用VisualVM来分析核心转储.我怀疑一些XML对象会导致泄漏,但是有太多的String对象要逐一进行.
我可以使用OQL搜索以'GH'开头的字符串吗?
谢谢你的帮助.
您是否使用过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
Run Code Online (Sandbox Code Playgroud)
不幸的是,sum(),max(),min()这样的组函数不存在.我将总结果行(约60,000)导出到excel文件并在excel表中求和.
你有关于使用组功能的提示或隐藏(?)功能/功能(如sum())吗?
我有一个内存转储文件,它有近5000个特定对象的实例.这些对象将被写入数据库,我这样做的方法是在jvisualvm中编写一个OQL查询,以生成一个字符串,用作SQL插入,例如
select "insert into trades (id, tradeNumber) values ("+ x.id+ ", " + x.tradeNumber +");" from com.test.application.TradeObject x;
Run Code Online (Sandbox Code Playgroud)
当我通过OQL运行时,我得到一个这样的结果集 -
<code>
insert into trades (id, tradeNumber) values (1,12345);
insert into trades (id, tradeNumber) values (2,123456);
insert into trades (id, tradeNumber) values (3,123457); </code>
Run Code Online (Sandbox Code Playgroud)
等等
但是,由于实例总数很大(大约5000),JvisualVM只显示其中的大约100个.然后出现错误消息"结果太多.请优化您的查询."
我无法优化查询,因为我必须以这种方式解析所有实例.有没有办法可以让JvisualVM向我显示所有实例而不限制结果数量?
我还看到Jvisual vm显示前100个没有任何过滤器的实例,是否可以通过OQL查询获得接下来的100个实例等等?
谢谢
我有一个使用 Eclipse Memory Analyzer 打开的转储。
我想将堆的一些内容导出到一个文件中。
我感兴趣的字段之一是 anArrayList并且我找不到以将数组列表的内容作为输出返回的方式查询转储的方法:
选择 ArrayList 对象本身会返回如下内容:
java.util.ArrayList [id=0xf2765680]
在数组列表 ( select arr.elementData...) 中选择数组会返回类似以下内容:
java.lang.Object[] [id=0xf2765698;length=4]
当 arrayList 不为 null 时选择toString(arr)或toString(arr.elementData)返回空字符串(如果为空则为字符串null)。
真的不可能吗??
如何使用OQL语法计算Eclipse MAT中的对象?这不起作用:
SELECT count(a) FROM org.hibernate.engine.EntityEntry a
WHERE (toString(a.entityName)="my.pojo")
(我想计算加载到内存中的hibernate pojos的数量)
必须有一个非常快速的方法...谢谢你帮助我!
得到这个奇怪的错误:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: size is not a function, it is null. (#1)
在分析堆转储并在VisualVM上运行此OQL查询时:
select { map: x }
from java.util.concurrent.ConcurrentHashMap x
where x.size() < 10
Run Code Online (Sandbox Code Playgroud)
问题在于该where条款,不管怎么说它没有用,虽然Map显然有一个大小方法.
如何在堆中找到对象的大小,包括它从其字段引用的所有对象?
在堆转储下的Classes视图中,大小仅指示对象的"浅"大小.我想知道对象的大小是什么,基本上是它通过字段引用的对象的总大小.
谢谢
我正在尝试使用jhat / OQL来跟踪Tomcat容器中的内存泄漏。我想问的问题是:
“向我展示可以从javax.servlet.http.HttpSession访问的foo.bar.Cacheable类的所有实例(和子实例)”
我设法提出了以下内容,但这并未显示foo.bar.Cacheable的子类(这很重要,因为这实际上是一个接口)。
select filter(reachables(s), "/foo.bar.Cacheable/(classof(it).name)") from javax.servlet.http.HttpSession s
Run Code Online (Sandbox Code Playgroud)
我尝试了以下概念的各种排列,但始终会出错(未定义“ foo”)。
select filter(reachables(s), classof(it) instanceof foo.bar.Cacheable) from javax.servlet.http.HttpSession s
Run Code Online (Sandbox Code Playgroud)
谁能通过OQL帮我解决我做错的事情吗?
我有一个堆转储,并且正在使用Eclipse MAT,尽管我认为这应该通过visualvm或任何OQL客户端来工作。
我们可以通过执行以下操作来选择类的所有实例的字段
select s.field1, s.field2 from org.me.MyClass
Run Code Online (Sandbox Code Playgroud)
...但这仅限于成员变量和带有实例的类型。
如何选择没有实例的类的静态字段?
这与另一个问题有关。
我从应用程序中获得了一个堆转储,并发现有大量的ArrayLists,其中只有一个对象.我知道如何获取这些arraylists的列表,并显示包含元素的类:
SELECT list.elementData[0] FROM java.util.ArrayList list WHERE (list.size = 1)
Run Code Online (Sandbox Code Playgroud)
结果如下:
java.lang.String [id=0x7f8e44970]
java.lang.String [id=0x7f8e44980]
java.lang.String [id=0x7f8e44572]
java.io.File [id=0x7f8e43572]
...
Run Code Online (Sandbox Code Playgroud)
我想要的是得到这样的东西:
Class | count
=================================
java.lang.String | 100
java.io.File | 74
...
Run Code Online (Sandbox Code Playgroud)
但我无法汇总结果或对其进行任何其他操作.我在这里找到了如何将值传递给外部选择,但我无法弄清楚如何*在第一个选择旁边使用其他任何东西.
SELECT * from OBJECTS
(SELECT OBJECTS list.elementData[0] FROM java.util.ArrayList list WHERE (list.size = 1))
Run Code Online (Sandbox Code Playgroud)