2009-10-26 47 views
0

我有一個運行速度非常慢,偶爾掛起的Web應用程序。它是一個與學校有關的Wicket應用程序,具有報告和編輯功能,也是自動化客戶端通過HTTPS獲取/發佈數據的servlet。Tomcat性能問題

在忙於大量編輯/上傳/下載過程中,應用程序變得呆滯且無響應。我得到Wicket「PageMap仍然鎖定」的錯誤。雄貓似乎一直在徘徊。內存使用可管理,大約50M。

我成立了YourKit得到一些剖析信息,並在一個繁忙的時期發現的Tomcat的CPU時間的81%是在這裏度過的:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run() 
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[]) 
org.apache.jk.common.ChannelSocket.processConnection(MsgContext) 
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext) 
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int) 
java.io.BufferedInputStream.read(byte[], int, int) 
java.io.BufferedInputStream.read1(byte[], int, int) 
java.io.BufferedInputStream.fill() 
java.net.SocketInputStream.read(byte[], int, int) 
[Wall Time] java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) 

在這個應用程序,我已經得到了約250客戶投票服務器通過SSL請求每30秒更新一次。大多數情況下,這很快就會返回一個空的迴應。偶爾會出現一系列數據庫活動,並且可能會將大量數據(幾MB)發送回客戶端。

那麼這81%的活動來自哪裏?有幾個連接速度非常慢的客戶端可能導致它等待傳入的請求體,從而導致tomcat線程無法工作?

任何人都看過類似的東西,或者對如何測試/疑難解答/修復這個問題有任何建議?

+0

通過電線傳遞的數據集有多大? – popester 2009-10-26 02:53:42

+0

當在服務器上編輯單個記錄時,所有客戶端只下載修改後的記錄。 1或2 k。如果客戶重置,它會下載學校的所有數據。可能不會超過5 MB。 – 2009-10-26 03:37:51

+0

下載所有的數據聽起來很討厭。客戶真的需要所有這些數據嗎?你可以做一些分頁?另外,客戶如何獲取數據?腳本調用某種Web服務? – popester 2009-10-26 03:47:14

回答

0

您應該設置一個測試環境,並嘗試通過負載測試重現此問題。
這樣你就可以找出原因。否則,有太多因素。
此外,這種方式可以嘗試修復而不會危害您的prod env。

+0

感謝您的支票 - 祝您好運! – thethinman 2009-11-09 18:35:00

0

內存使用可能是原因。
你應該檢查java進程的內存使用情況,看它有多少。
如果它不夠用,必須設置Xmx jvm參數,無論這些參數是爲tomcat設置的。

+0

今天測試顯示GC是穩定的,因爲我增加了JPA實體緩存大小。該應用程序使用大約1.1 GB的RAM。 – 2009-10-26 15:15:28