Java線程問題分析定位


Java線程問題分析定位

分析步驟:

1、使用top命令查看系統資源占用情況,發現Java進程占用大量CPU資源,PID為11572;

2、顯示進程詳細列表命令:ps -mp 11572 -o THREAD,tid,time

找到消耗資源多的TID,如TID:112052

 3、將TID轉換成16進制:printf "%x\n" 12052

 

4、打印堆棧信息:jstack 11572 |grep 2f14 -A 30

 

Thread dump信息如下:

"thread1" prio=6 tid=0x02de8400 nid=0x2688 runnable [0x0320f000]

   java.lang.Thread.State: RUNNABLE

    at DeadLock.callLongTime(DeadLock.java:63)

    at DeadLock$2.run(DeadLock.java:41)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

    at java.util.concurrent.FutureTask.run(FutureTask.java:166)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

    at java.lang.Thread.run(Thread.java:722)

 

   Locked ownable synchronizers:

    - <0x22be1488> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

 

"thread2" prio=6 tid=0x02de6c00 nid=0x218c waiting on condition [0x031bf000]

   java.lang.Thread.State: WAITING (parking)

    at sun.misc.Unsafe.park(Native Method)

    - parking to wait for  <0x22be1488> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:867)

    at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1197)

    at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:214)

    at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:290)

    at DeadLock$2.run(DeadLock.java:40)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)

    at java.util.concurrent.FutureTask.run(FutureTask.java:166)

    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)

    at java.lang.Thread.run(Thread.java:722)

 

   Locked ownable synchronizers:

    - <0x22be64e0> (a java.util.concurrent.ThreadPoolExecutor$Worker)

 

          線程“thread2”處於WAITING狀態,- parking to wait for  <0x22be1488>,等待給0x22be1488的地址,而0x22be1488地址正被“thread1”上鎖,Dump日志中有大量線程等待給這個地址上鎖,就會出現線程等待資源超時。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM