2011-11-30 1 views
0

나는 돌고있는 앱에서 그런 스레드를 많이 가지고있다. 나는 잘못 가고있는 것을 어떻게 디버그 할 수 있는지 궁금했다.스레드 대기 문제를 디버깅하는 방법은 무엇입니까?

2011-11-30 18:25:52 
Full thread dump OpenJDK Client VM (19.0-b09 mixed mode, sharing): 

"pool-34193-thread-1" prio=10 tid=0xac634800 nid=0x515 waiting on condition [0xaaf2c000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x6429b8c0> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:453) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:352) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 

"pool-34189-thread-1" prio=10 tid=0xac3f8400 nid=0x512 waiting on condition [0xaf766000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x64177778> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:453) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:352) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 

"pool-34187-thread-1" prio=10 tid=0xac63c800 nid=0x511 waiting on condition [0xab349000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x64f78728> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:453) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:352) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 

"pool-34176-thread-1" prio=10 tid=0xac630000 nid=0x510 waiting on condition [0xab48d000] 
    java.lang.Thread.State: TIMED_WAITING (parking) 
    at sun.misc.Unsafe.park(Native Method) 
    - parking to wait for <0x6421b7e8> (a java.util.concurrent.SynchronousQueue$TransferStack) 
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
    at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:453) 
    at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:352) 
    at java.util.concurrent.SynchronousQueue.poll(SynchronousQueue.java:903) 
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:636) 

@ 피터, 그들 중 많은 잠금

기다리고있을 것
"qtp26356569-17296" prio=10 tid=0xb3c09800 nid=0x2932 waiting on condition [0x9c762000] 
java.lang.Thread.State: TIMED_WAITING (parking) 
at sun.misc.Unsafe.park(Native Method) 
- parking to wait for <0x714e4798> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) 
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226) 
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2081) 
at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:320) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.idleJobPoll(QueuedThreadPool.java:512) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.access$600(QueuedThreadPool.java:38) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:558) 
at java.lang.Thread.run(Thread.java:636) 
+1

전체 스레드 덤프를주십시오 (익명 일 수 있음). 또한 [tda] (http://java.net/projects/tda) –

+1

에서 왜 일이 잘못되었다고 생각하십니까? 할 일이없는 스레드가 많이있는 것 같습니다 (들어오는 요청을 기다리는 중입니다). –

답변

0

걱정하지 마세요, 그냥 대기중인 스레드의 대부분은, 그들이 때 요청 바쁜 될 것으로 보인다 귀하의 부두 (Jetty) 서버에 도착하십시오.

대부분의 웹 서버는 매번 스레드 개체를 만들거나 삭제하지 않기 위해 특정 크기의 스레드 풀을 유지합니다.

Jetty 구성을 확인하여 스레드 풀의 구성된 크기를 확인하고 대기중인 스레드 수와 비교하십시오.

관련 문제