`
ordinary
  • 浏览: 77301 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jstack 和jmap

    博客分类:
  • java
阅读更多

        sun提供的jvm检测工具jstack和jmsp,简单介绍:

 

          jstack命令行工具连接到指定的进程或核心文件,并打印所有连接到虚拟机的线程的堆栈跟踪信息,包括Java 线程和VM 内部线程,有时也包括本地堆栈框架。该工具还执行死锁检测。

用法:jstack [option] pid
参数(Options): 
         -F 在-l 不起作用时,强制打印
         -l 打印堆栈信息
        -m 混合模式打印(可打印c++和java的堆栈信息)
         -h 打印帮助信息
         -help 打印帮助信息
jstack -l 3805
2011-04-23 20:10:57
Full thread dump OpenJDK Client VM (19.0-b09 mixed mode, sharing):

"Process monitor" daemon prio=10 tid=0xad56e400 nid=0x1f52 in Object.wait() [0xac0ad000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at java.lang.UNIXProcess.waitFor(UNIXProcess.java:181)
	- locked <0x644ddec8> (a java.lang.UNIXProcess)
	at org.eclipse.debug.core.model.RuntimeProcess$ProcessMonitorThread.run(RuntimeProcess.java:417)

   Locked ownable synchronizers:
	- None

"Input Stream Monitor" daemon prio=10 tid=0xad56d800 nid=0x1f51 in Object.wait() [0xad3f7000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.debug.internal.core.InputStreamMonitor.writeNext(InputStreamMonitor.java:154)
	- locked <0x64520c28> (a java.lang.Object)
	at org.eclipse.debug.internal.core.InputStreamMonitor.write(InputStreamMonitor.java:124)
	at org.eclipse.debug.internal.core.InputStreamMonitor$1.run(InputStreamMonitor.java:99)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Output Stream Monitor" daemon prio=10 tid=0xabda1400 nid=0x1f50 runnable [0xac38b000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:236)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:273)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
	- locked <0x6451eb48> (a java.io.BufferedInputStream)
	at java.io.FilterInputStream.read(FilterInputStream.java:107)
	at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:144)
	at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134)
	at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Output Stream Monitor" daemon prio=10 tid=0xabb8f800 nid=0x1f4f runnable [0xad355000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:236)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:273)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
	- locked <0x644e7128> (a java.io.BufferedInputStream)
	at java.io.BufferedInputStream.read1(BufferedInputStream.java:273)
	at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
	- locked <0x6451caa0> (a java.io.BufferedInputStream)
	at java.io.FilterInputStream.read(FilterInputStream.java:107)
	at org.eclipse.debug.internal.core.OutputStreamMonitor.read(OutputStreamMonitor.java:144)
	at org.eclipse.debug.internal.core.OutputStreamMonitor.access$1(OutputStreamMonitor.java:134)
	at org.eclipse.debug.internal.core.OutputStreamMonitor$1.run(OutputStreamMonitor.java:207)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"process reaper" daemon prio=10 tid=0xad5da800 nid=0x1f4d runnable [0xac820000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.UNIXProcess.waitForProcessExit(Native Method)
	at java.lang.UNIXProcess.access$900(UNIXProcess.java:36)
	at java.lang.UNIXProcess$1$1.run(UNIXProcess.java:148)

   Locked ownable synchronizers:
	- None

"Timer-186" daemon prio=10 tid=0x08311400 nid=0x1f4a in Object.wait() [0xac2a0000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.util.TimerThread.mainLoop(Timer.java:531)
	- locked <0x7310a5b0> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:484)

   Locked ownable synchronizers:
	- None

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=10 tid=0x0952dc00 nid=0x1f38 in Object.wait() [0xb4a09000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:179)
	- locked <0x7305fe68> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

   Locked ownable synchronizers:
	- None

"Attach Listener" daemon prio=10 tid=0xac15b800 nid=0x1e38 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Java2D Disposer" daemon prio=10 tid=0x08f46000 nid=0x1af9 in Object.wait() [0xad4fe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
	- locked <0x7296f588> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
	at sun.java2d.Disposer.run(Disposer.java:143)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Worker-13" prio=10 tid=0x092d8400 nid=0x1af3 in Object.wait() [0xad684000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
	- locked <0x6e660150> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:230)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"Worker-12" prio=10 tid=0xac158400 nid=0x1af2 in Object.wait() [0xac5fe000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
	- locked <0x6e660150> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:230)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"Thread-23" daemon prio=10 tid=0xad7dbc00 nid=0xf91 in Object.wait() [0xac2f1000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x714efc80> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
	- locked <0x714efc80> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
	at org.tmatesoft.svn.core.javahl.SVNClientImplTracker.run(SVNClientImplTracker.java:65)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Dali Event Handler" prio=10 tid=0xb4cf7800 nid=0xf85 in Object.wait() [0xb12c6000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.jpt.utility.internal.SynchronizedQueue.waitUntilEmptyIs_(SynchronizedQueue.java:138)
	at org.eclipse.jpt.utility.internal.SynchronizedQueue.waitUntilEmptyIs(SynchronizedQueue.java:129)
	- locked <0x70ea3d70> (a org.eclipse.jpt.utility.internal.SynchronizedQueue)
	at org.eclipse.jpt.utility.internal.SynchronizedQueue.waitUntilNotEmpty(SynchronizedQueue.java:153)
	at org.eclipse.jpt.utility.internal.AsynchronousCommandExecutor$Consumer.waitForProducer(AsynchronousCommandExecutor.java:156)
	at org.eclipse.jpt.utility.internal.ConsumerThreadCoordinator$RunnableConsumer.run(ConsumerThreadCoordinator.java:199)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Worker-9" prio=10 tid=0x08dd7400 nid=0xf83 in Object.wait() [0xac24f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
	- locked <0x6e660150> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:230)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"JavaScript indexing" daemon prio=10 tid=0xabb23800 nid=0xf5d in Object.wait() [0xac0fe000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x70a9cb40> (a org.eclipse.wst.jsdt.internal.core.search.indexing.IndexManager)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.wst.jsdt.internal.core.search.processing.JobManager.run(JobManager.java:370)
	- locked <0x70a9cb40> (a org.eclipse.wst.jsdt.internal.core.search.indexing.IndexManager)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"com.google.inject.internal.util.$Finalizer" daemon prio=10 tid=0x088e0000 nid=0xf54 in Object.wait() [0xb1525000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x6f507b68> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
	- locked <0x6f507b68> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
	at com.google.inject.internal.util.$Finalizer.run(Finalizer.java:144)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Timer-0" daemon prio=10 tid=0x085cbc00 nid=0xf44 in Object.wait() [0xac3fe000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.util.TimerThread.mainLoop(Timer.java:531)
	- locked <0x6f316880> (a java.util.TaskQueue)
	at java.util.TimerThread.run(Timer.java:484)

   Locked ownable synchronizers:
	- None

"Worker-5" prio=10 tid=0x08870400 nid=0xf34 waiting on condition [0xb125d000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x6ef90e68> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043)
	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:386)
	at org.eclipse.epp.usagedata.internal.gathering.services.UsageDataService.getQueuedEvent(UsageDataService.java:222)
	at org.eclipse.epp.usagedata.internal.gathering.services.UsageDataService.access$0(UsageDataService.java:220)
	at org.eclipse.epp.usagedata.internal.gathering.services.UsageDataService$1.run(UsageDataService.java:155)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

   Locked ownable synchronizers:
	- None

"Worker-3" prio=10 tid=0x08c6b800 nid=0xf32 in Object.wait() [0xac7ad000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.ui.console.IOConsoleInputStream.waitForData(IOConsoleInputStream.java:147)
	at org.eclipse.ui.console.IOConsoleInputStream.read(IOConsoleInputStream.java:92)
	- locked <0x645660a8> (a org.eclipse.ui.console.IOConsoleInputStream)
	at org.eclipse.ui.console.IOConsoleInputStream.read(IOConsoleInputStream.java:117)
	at org.eclipse.debug.internal.ui.views.console.ProcessConsole$InputReadJob.run(ProcessConsole.java:678)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

   Locked ownable synchronizers:
	- None

"Worker-2" prio=10 tid=0x08c50400 nid=0xf31 in Object.wait() [0xb15b3000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:185)
	- locked <0x6e660150> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:230)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:50)

   Locked ownable synchronizers:
	- None

"[ThreadPool Manager] - Idle Thread" daemon prio=10 tid=0x087cfc00 nid=0xefd in Object.wait() [0xb1115000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor.run(Executor.java:106)
	- locked <0x6eee76b0> (a org.eclipse.equinox.internal.util.impl.tpt.threadpool.Executor)

   Locked ownable synchronizers:
	- None

"Bundle File Closer" daemon prio=10 tid=0x088fb800 nid=0xefc in Object.wait() [0xb11d6000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:397)
	- locked <0x6ee7c6e0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:333)

   Locked ownable synchronizers:
	- None

"Java indexing" daemon prio=10 tid=0x088a8000 nid=0xefb in Object.wait() [0xb1317000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:381)
	- locked <0x6ece1ca0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Worker-JM" prio=10 tid=0xb4cae000 nid=0xef6 in Object.wait() [0xb4967000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.core.internal.jobs.InternalWorker.run(InternalWorker.java:58)
	- locked <0x6e6602c8> (a java.util.ArrayList)

   Locked ownable synchronizers:
	- None

"[Timer] - Main Queue Handler" daemon prio=10 tid=0xb4c99800 nid=0xef5 in Object.wait() [0xb49b8000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at org.eclipse.equinox.internal.util.impl.tpt.timer.TimerImpl.run(TimerImpl.java:141)
	- locked <0x6e660348> (a java.lang.Object)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Framework Event Dispatcher" daemon prio=10 tid=0xb4c84800 nid=0xef3 in Object.wait() [0xb4a5a000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:397)
	- locked <0x6e6603b0> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:333)

   Locked ownable synchronizers:
	- None

"Start Level Event Dispatcher" daemon prio=10 tid=0x082b0c00 nid=0xef2 in Object.wait() [0xb4aab000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x6e5304f8> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:502)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:397)
	- locked <0x6e5304f8> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:333)

   Locked ownable synchronizers:
	- None

"State Data Manager" daemon prio=10 tid=0x082f2000 nid=0xef1 waiting on condition [0xb4afc000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
	at java.lang.Thread.sleep(Native Method)
	at org.eclipse.osgi.internal.baseadaptor.StateManager.run(StateManager.java:319)
	at java.lang.Thread.run(Thread.java:636)

   Locked ownable synchronizers:
	- None

"Low Memory Detector" daemon prio=10 tid=0x08274800 nid=0xeef runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"CompilerThread0" daemon prio=10 tid=0x08271c00 nid=0xeee waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Signal Dispatcher" daemon prio=10 tid=0x08270400 nid=0xeed runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"Finalizer" daemon prio=10 tid=0x0826cc00 nid=0xeec in Object.wait() [0xb4e40000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:133)
	- locked <0x6e360358> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:149)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

   Locked ownable synchronizers:
	- None

"Reference Handler" daemon prio=10 tid=0x08268000 nid=0xeeb in Object.wait() [0xb4e91000]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	at java.lang.Object.wait(Object.java:502)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
	- locked <0x6e360098> (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
	- None

"main" prio=10 tid=0x08239400 nid=0xedd runnable [0xbfc83000]
   java.lang.Thread.State: RUNNABLE
	at org.eclipse.swt.internal.gtk.OS.Call(Native Method)
	at org.eclipse.swt.widgets.Display.sleep(Display.java:4021)
	at org.eclipse.ui.application.WorkbenchAdvisor.eventLoopIdle(WorkbenchAdvisor.java:364)
	at org.eclipse.ui.internal.ide.application.IDEWorkbenchAdvisor.eventLoopIdle(IDEWorkbenchAdvisor.java:887)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2641)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1408)

   Locked ownable synchronizers:
	- None

"VM Thread" prio=10 tid=0x08266400 nid=0xeea runnable 

"VM Periodic Task Thread" prio=10 tid=0x08276c00 nid=0xef0 waiting on condition 

JNI global references: 2009
  
 这种方法可以查看是否存在死锁,当然kill -3 pid也可以的。
    jmap是打印当前线程中,堆中所分配的对象信息,这样可以帮助用户查看哪些对象分配空间大以及该用单例的对象是否变为多例(前端时间就遇到个单例的问题,本来一个ThreadLocal对象应该是单例的,这样每次从对象中就能获得当前线程占用的对象,但是,代码中ThreadLocal对象是多例的,设置的是用的ThreadLocal对象1,获取时却是从ThreadLocal对象2中获取,这个问题查找了一个星期,直到最后才查出原因)
试用方法:
 jmap [ option ] pid
jmap [ option ] executable core
jmap [ option ] [server-id@]remote-hostname-or-IP
参数说明:
option
可选的命令参数
pid
线程id

executable
Java executable from which the core dump was produced.
(可能是产生core dump的java可执行程序)
core
将被打印信息的core dump文件

remote-hostname-or-IP
远程debug服务的主机名或ip

server-id
唯一id,假如一台主机上多个远程debug服务
option 参数描述
-dump:[live,]format=b,file=
输出jvm的heap内容到文件,并使用hprof二进制形式. live子选项如果指定,那么只输出活的对象到文件.
-finalizerinfo
打印正等待回收的对象的信息
-histo[:live]
打印每个class的实例数量,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 假如live子参数加上后,只统计活的对象数量.
-permstat
打印classload和jvm heap持久层的信息. 包括每个classloader的名字,活跃性,地址,父classloader和加载的class数目. 另外,内部String的数量和占用内存数也会打印出来.
-F
强制.在pid没有相应的时候使用-dump或者-histo参数. 在这个模式下,live子参数无效.
-h | -help
打印帮助信息
-J
传递参数给jmap启动的jvm.
 
   看jmap打印的信息 (instances表示实例数)
zhutao@zhutao-ThinkPad-SL:~$ jmap -histo 3805

 num     #instances         #bytes  class name
----------------------------------------------
   1:        460608       43696072  [C
   2:        223150       32302936  <constMethodKlass>
   3:        354365       18073432  <symbolKlass>
   4:        223150       17868632  <methodKlass>
   5:        125718       16314024  [I
   6:         22533       14251960  <constantPoolKlass>
   7:        109146       12854440  [B
   8:         22533       10488912  <instanceKlassKlass>
   9:        391794        9403056  java.lang.String
  10:         18558        8119504  <constantPoolCacheKlass>
  11:        127959        5720464  [Ljava.lang.Object;
  12:        183635        4407240  java.util.HashMap$Entry
  13:         33719        4222864  [Ljava.util.HashMap$Entry;
  14:         93165        2981280  org.apache.xerces.dom.AttrImpl
  15:         33609        2483264  [S
  16:         24171        2320416  java.lang.Class
  17:         41104        1972992  org.apache.xerces.dom.ElementImpl
  18:          5784        1608448  [Lorg.eclipse.ui.views.markers.internal.MarkerType;
  19:         36174        1537464  [[I
  20:         49147        1179528  org.eclipse.equinox.internal.p2.metadata.OSGiVersion
  21:         25175        1007000  java.util.HashMap
  22:         41107         986568  java.util.ArrayList
  23:         30309         969888  java.util.LinkedHashMap$Entry
  24:         40040         960960  java.util.Vector
  25:         35308         847392  org.apache.xerces.dom.AttributeMap
  26:         26437         845984  org.eclipse.equinox.internal.p2.metadata.RequiredCapability
  27:         20354         840960  [Ljava.lang.String;
  28:         35031         840744  java.util.Hashtable$Entry
  29:         34184         820416  java.util.ArrayList$Itr
  30:          8814         809720  [[C
  31:         10126         676048  [Ljava.util.Hashtable$Entry;
  32:         26839         644136  org.eclipse.equinox.internal.p2.metadata.ProvidedCapability
  33:          1638         537264  <objArrayKlassKlass>
  34:         28872         461952  org.eclipse.equinox.internal.p2.metadata.expression.MatchExpression
  35:         10036         401440  java.util.WeakHashMap$Entry
  36:         24684         394944  org.eclipse.jdt.internal.ui.text.spelling.engine.AbstractSpellDictionary$ByteArrayWrapper
  37:          6977         390712  org.jboss.tools.common.meta.impl.XAttributeImpl
  38:          7008         336384  java.util.LinkedHashMap
  39:          4388         315936  java.lang.reflect.Field
  40:          6303         302544  java.util.Properties
  41:         17642         282272  java.lang.Integer
  42:         11230         269520  java.lang.ref.WeakReference
  43:          3329         266320  java.lang.reflect.Method
  44:          4992         239616  org.eclipse.ui.internal.handlers.HandlerActivation
 

 

    接下来简单介绍下jps和jtrace。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics