- 我有一個Java應用程序,我正在使用來自oswego的PooledExecuter。
- 我強烈懷疑我的應用程序中存在線程爭用,無論使用PooledExecuter,請求都花費時間=大致沒有請求*時間用於一個請求。
- 我想收集肯定存在線索爭用的證據。
- 有沒有什麼辦法可以設置一些JVM參數,這些JVM參數可以顯示不同的線程在做什麼或者其他可以用來檢測線程爭用的方式。
2
A
回答
1
我不知道的JVM選項,它可以告訴你,我會附上探查到它,看看線程競爭(阻塞/等待)的地段,然後看哪個鎖定他們正在爭奪。
2
從您的描述中可以看出,您擁有的資源是單線程的,您的代碼無法高效地使用多個線程。你應該能夠通過在發生這種情況時進行線程轉儲來看到這一點(幾次)你應該看到一個線程正在做「真正」的工作,並且池中的所有其他線程正在等待某些東西或空閒。
+1
http://stackoverflow.com/questions/8338131/thread-waiting-on-monitors相關(顯示轉儲和說明) – Fuhrmanator 2012-04-19 13:07:11
2004年,oswego的庫大部分都是在Java 5.0中進行了合併。您是否嘗試過內置的併發庫,因爲我知道JVM有一些優化工作可以使用它嗎? – 2012-04-19 12:56:10
'jvisualvam'很好地顯示每個線程正在做什麼。 – biziclop 2012-04-19 13:03:44
jvisualvm +1(它帶有JDK)和Yourkit分析器是我有很好的經驗的商業工具。 – 2012-04-19 15:06:16