我有一個運行速度非常慢,偶爾掛起的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線程無法工作?
任何人都看過類似的東西,或者對如何測試/疑難解答/修復這個問題有任何建議?
通過電線傳遞的數據集有多大? – popester 2009-10-26 02:53:42
當在服務器上編輯單個記錄時,所有客戶端只下載修改後的記錄。 1或2 k。如果客戶重置,它會下載學校的所有數據。可能不會超過5 MB。 – 2009-10-26 03:37:51
下載所有的數據聽起來很討厭。客戶真的需要所有這些數據嗎?你可以做一些分頁?另外,客戶如何獲取數據?腳本調用某種Web服務? – popester 2009-10-26 03:47:14