2011-12-20 54 views
-1

我們正在加載測試我們的Web應用程序(Java,Struts,Spring,Java EE)。結果表明,在發送給服務器的11000個奇數請求中,只有1500個奇數通過;其中大多數失敗拋出SocketException。在Web應用程序上加載測試

這可能會發生什麼原因?

我不知道應該在哪裏尋找解決它。

+0

併發事務數量可能有限制嗎?我以前有過,只需要改變參數。 – 2011-12-20 06:52:27

+0

堆棧跟蹤告訴你什麼? – rkb 2011-12-20 07:40:08

回答

2

這很可能是你壓倒你的服務器。操作系統只會維護一個有界的連接隊列,並且你的應用程序幾乎可以肯定有一定數量的線程處理傳入的連接。

我建議你開始記錄有多少空閒處理線程的指標,以及(如果可以的話)操作系統隊列中有多少掛起的連接。如果您始終擁有零空閒線程和OS隊列達到或接近最大值,那麼您知道自己已達到硬件和/或軟件和/或數據庫的限制。

您還應該觀察操作系統的CPU和I/O負載指標。這可能有助於縮小瓶頸。如果你還沒有最大化CPU,但你有很多的I/O等待,那麼你需要優化I/O操作。如果你始終擊中100%的CPU,那麼你需要提高你的代碼的效率或者投入更多的硬件。您還需要留意垃圾收集器,因爲如果它開始旋轉,那麼會降低性能。

性能調整很難。你真的需要非常小心你的測量,但CPU負載,I/O等待,網絡活動和內存消耗是一個好的開始。