我有线程转储和进程内存转储,其中挂起线程。
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000070feebf40> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283)
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at voldemort.store.readonly.chunk.DataFileChunkSetIterator.<init>(DataFileChunkSetIterator.java:66)
at voldemort.store.readonly.chunk.ChunkedFileSet$ROKeyIterator.<init>(ChunkedFileSet.java:617)
at voldemort.store.readonly.ReadOnlyStorageEngine.keys(ReadOnlyStorageEngine.java:478)
at voldemort.server.protocol.admin.FullScanFetchStreamRequestHandler.<init>(FullScanFetchStreamRequestHandler.java:66)在voldemort.server.protocol.admin.FullScanFetchEntriesRequestHandler.(FullScanFetchEntriesRequestHandler.java:53)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)但是我需要看看内存位置0x000000070ff40上的是什么对象。有什么简单的方法可以看到这个物体吗?YourKit和jvisualvm都看不到这个内存地址中的内容。
我试过用实例来查找,但其中大多数都有300个实例,这使得分析变得非常困难。
我使用过C#,在那里您可以轻松地使用WinDbg和sos插件搜索内存。
发布于 2015-02-14 07:59:18
如果您有堆转储和要查找的对象的位置,请在VisualVM中加载该转储并在OQL控制台中使用以下查询
select heap.findObject("0x00000000fe9d4910")发布于 2015-02-17 08:00:27
我不认为0x000000070Ff40是记忆中的地址。这是对象标识哈希码。标识哈希码是持久化的,但是内存中的地址是不稳定的(GC移动对象)。
发布于 2015-02-17 08:07:23
在内存中找出对象之后,你会得到什么呢?这是ReentrantReadWriteLock的内部对象,线程停在那里等待acquire成功(这意味着锁很忙)。要诊断任何真正的问题,最好是查看源代码。堆栈的这一部分:
...
at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
at voldemort.store.readonly.chunk.DataFileChunkSetIterator.<init>(DataFileChunkSetIterator.java:66)
......means --您正在DataFileChunkSetIterator构造函数中寻找一个ReentrantReadWriteLock.readLock().lock()。
https://stackoverflow.com/questions/28505483
复制相似问题