java虚拟机系列:如何使用jstack

语法

[@82995c215909 ~]$ jstack -h
Usage:
jstack [-l]
(to connect to running process)
jstack -F [-m] [-l]
(to connect to a hung process)
jstack [-m] [-l]
(to connect to a core file)
jstack [-m] [-l] [server_id@]
(to connect to a remote debug server)

Options:
-F to force a thread dump. Use when jstack does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message

线程状态

NEW,未启动的。不会出现在Dump中。
RUNNABLE,在虚拟机内执行的。运行中状态,可能里面还能看到locked字样,表明它获得了某把锁。
BLOCKED,受阻塞并等待监视器锁。被某个锁(synchronizers)給block住了。
WATING,无限期等待另一个线程执行特定操作。等待某个condition或monitor发生,一般停留在park(), wait(), sleep(),join() 等语句里。
TIMED_WATING,有时限的等待另一个线程的特定操作。和WAITING的区别是wait() 等语句加上了时间限制 wait(timeout)。
TERMINATED,已退出的

用法

  • jstack pid
[@82995c215909 ~]$ jstack  18154
2018-07-25 20:12:11
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.101-b13 mixed mode):

"Attach Listener" #1002 daemon prio=9 os_prio=0 tid=0x00007fe1b8001000 nid=0x4ccc waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"DubboServerHandler-10.16.31.169:9999-thread-200" #852 daemon prio=5 os_prio=0 tid=0x00007fe10c015000 nid=0x4a74 waiting on condition [0x00007fded1df8000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000643172d98> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

"DubboServerHandler-10.16.31.169:9999-thread-199" #850 daemon prio=5 os_prio=0 tid=0x00007fe0ec05f000 nid=0x4a72 waiting on condition [0x00007fded1e39000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000643172d98> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

- jstack -l pid :显示了锁的信息

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.101-b13 mixed mode):

"Attach Listener" #1002 daemon prio=9 os_prio=0 tid=0x00007fe1b8001000 nid=0x4ccc waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
	- None

"DubboServerHandler-10.16.31.169:9999-thread-200" #852 daemon prio=5 os_prio=0 tid=0x00007fe10c015000 nid=0x4a74 waiting on condition [0x00007fded1df8000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000643172d98> (a java.util.concurrent.SynchronousQueue$TransferStack)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
	at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
	at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

   Locked ownable synchronizers:
	- None


  • jstack -m pid
@82995c215909 ~]$ jstack -m 18154
Attaching to process ID 18154, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.101-b13
Deadlock Detection:

No deadlocks found.

----------------- 18155 -----------------
0x00007fe2806fe705	__pthread_cond_wait + 0xc5
0x00007fe27f808837	_ZN7Monitor5IWaitEP6Threadl + 0xf7
0x00007fe27f809000	_ZN7Monitor4waitEblb + 0x100
0x00007fe27f99d251	_ZN7Threads10destroy_vmEv + 0x51
0x00007fe27f5f74f1	jni_DestroyJavaVM + 0x81
0x00007fe2804e463d	JavaMain + 0x27d
----------------- 18156 -----------------
0x00007fe2806fe705	__pthread_cond_wait + 0xc5
0x00007fe27f808837	_ZN7Monitor5IWaitEP6Threadl + 0xf7
0x00007fe27f809156	_ZN7Monitor4waitEblb + 0x256
0x00007fe27f4ffd23	_ZN13GCTaskManager8get_taskEj + 0x43
0x00007fe27f500bb8	_ZN12GCTaskThread3runEv + 0x188
0x00007fe27f84e698	_ZL10java_startP6Thread + 0x108

参照:
java命令–jstack 工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值