Jersey을 사용하여 REST 서비스를 구축했습니다.이 스택 덤프는 교착 상태가 있음을 나타 냅니까?
내 REST API에 대해 "말림"을 수행하면 명령이 중지됩니다.
내가 실행 한 jstack & 이것은 BLOCKED 상태의 두 스레드 요약 출력입니다.
"pool-2-thread-11" prio=6 tid=0x01d51800 nid=0x2394
waiting for monitor entry [0x05e6f000..0x05e6fce8]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.moi.DefaultImageProcessor$DownloadAndScaleCallable.call(
DefaultImageProcessor.java:168)
- waiting to lock <0x257aa440>
(com.moi.ImageUriMutexImpl$MutexImpl)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
ThreadPoolExecutor.java:885)
"pool-2-thread-10" prio=6 tid=0x01d51000 nid=0x18d0
waiting for monitor entry [0x05e1f000..0x05e1fd68]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.moi.DefaultImageProcessor$DownloadAndScaleCallable.call(
DefaultImageProcessor.java:168)
- waiting to lock <0x257aa6b8>
(com.moi.ImageUriMutexImpl$MutexImpl)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(
ThreadPoolExecutor.java:885)
이 스택 덤프를 읽는 방법을 알고 싶습니다. 교착 상태에서 어떤 표지판을 찾아야합니까?
업데이트 내 문제가 해결되었습니다. 기본적으로 동기화 된 블록 내에서 HttpClient 4.0 GET을 수행하고 있습니다. HttpClient가 잘못 작동하여 &이 잠금 장치에 보관 된 &을 반환하지 않았습니다. jstack을 통해, 위의 문제를 일으키는 자물쇠를 잡고있는 두 개의 실이있었습니다. 교착 상태가 너무 많지는 않지만 이제는 동기화 된 블록이 너무 오래 돌아가고 있다는 것을 알았습니다.
그들은 모두 차단됩니다 ... – Bostone