2014-02-20 46 views
1

我們有一個輕微增長的春季webapp(在tomcat 7),這是非常緩慢的關機。 (這對我們的連續交付的性能有負面影響)我怎麼知道什麼是停止從關機彈簧webapp

我懷疑是,必須有一些bean在@PreDestroy方法中阻塞(或需要很長時間)。

到目前爲止,我已經確定它與通過給每個池,線程和定時器賦予不同名稱並確保它們是守護程序線程或正確關閉的線程(池)沒有關閉都是不正確關閉的。

有沒有人能解決這樣的情況,並能給我一個關於如何應對這個問題的提示?

順便說一句:殺死tomcat進程是而不是一個選項 - 我們真的需要一個乾淨的關閉我們的生產系統。

+1

您可以嘗試在運行事件探查應用程序並查看您的應用程序關閉時花費的時間。 – TheEwook

+1

你檢查了應用程序日誌嗎?也許在檢查之前增加日誌級別。你應該能夠看到它消耗的時間。 – Henry

+0

分析器是一個好主意;在應用程序日誌上:設置所有日誌級別進行調試,但沒有看到那裏:( –

回答

2

分析將是核選項。只需使用線程轉儲就可以很容易地瞭解正在發生的事情(尤其是如果它只是被阻塞的線程,因爲狀態會很長)。如果您將兩次轉儲分隔幾秒鐘,並顯示一個或多個線程的輸出相同或相似,那麼這可能是瓶頸。您可以使用jstack或「kill -3」(在合理的操作系統上)獲得線程轉儲。

0

,如果你使用的是Windows,然後選擇Java控制檯窗口,按下ctrl +停頓將轉儲到該窗口 - 只需點擊「進入」恢復執行

相關問題