在排除了JVM的一個在我們的生產環境掛着問題,我們遇到在於執行以下語句記錄奇怪的JVM線程掛起 - 建議排除故障?
logger.debug("Loaded ids as " + ids + ".");
一個線程被懸掛在這一步驟是可運行的線程狀態。這裏的ids是一個Set。還有另一個線程通過倒計數鎖存器等待上述線程來完成其任務。該軟件需要線程轉儲每15分鐘和兩個線程的蹤跡看如下
Stack trace for [THREAD GROUP: Job_Executor] [THREAD NAME:main-Runner Thread][THREAD STATE: WAITING]
...sun.misc.Unsafe.park(Native Method)
...java.util.concurrent.locks.LockSupport.park(Unknown Source)
...java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
...java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(Unknown Source)
...java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(Unknown Source)
...java.util.concurrent.CountDownLatch.await(Unknown Source)
...com.runner.MainRunner.stopThread(MainRunnerRunner.java:1334)
Stack trace for [THREAD GROUP: Job_Executor] [THREAD NAME:task executor][THREAD STATE: RUNNABLE]
...java.util.AbstractCollection.toString(Unknown Source)
...java.lang.String.valueOf(Unknown Source)
...java.lang.StringBuilder.append(Unknown Source)
...com.runner.CriticalTaskExecutor.loadByIds(CriticalTaskExecutor.java:143)
此JVM得到了掛了近24小時,最後我們不得不殺死它往前走。線程轉儲表明在RUNNABLE狀態下有43個線程,包括上述線程。
上述線程在RUNNABLE狀態下執行collection.toString()24小時的原因是什麼?
關於如何進行的任何建議?
你能告訴我們'的toString()'方法?任何延遲加載休眠字段或其他複雜? – Gray
我會以此爲忠告。感謝您指出。 –