2012-07-10 55 views
1

我有一個運行在Tomcat 7.0.23上的web應用程序(spring/hibernate)。症狀 是在運行幾天後(通常爲4至5天),響應 變得非常緩慢。通常在2秒內加載的頁面需要從30秒到50秒的任何地方 。重新啓動會使響應恢復正常(2 秒)。我在前後都進行了線程轉儲。我看到 問題(這是需要較長時間來回應)鎖定。這裏是 片段。Webapp在Tomcat上變得呆滯

at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) 
    at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    - locked <0x0000000799446298> (a 
org.apache.tomcat.util.net.SocketWrapper) 
    at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

一旦尋找到的代碼,有一個同步的方法和 解釋了鎖。但是,我想知道鎖定是否會減慢 的下降速度,爲什麼它沒有從新的開始顯示,爲什麼只有在 運行幾天之後才顯示。想知道在哪裏看。任何線索?提前致謝。

回答

0

我建議你運行一個基本的測試,使用類似jmeter或soapui的東西。

緩慢增加負載,看看會發生什麼:是通過屋頂的平均時間,還是隻是慢一點?您是否收到錯誤或者是否仍在運行?

同時,打開visualvm並看看你的虛擬機。你可能碰到一個內存pbs,GC忙着試圖釋放未使用的實例或者可能是鎖?使用線程轉儲和堆轉儲功能獲得更多信息。

我在一個非常老的應用程序上執行了這樣的測試,發現log4j 1.x在多線程中遇到了很大的問題:升級到log4j 2 - >問題解決了!

希望這會有所幫助。