2012-05-08 42 views
-3

我不明白爲什麼當請求太多時應用程序停止運行?我如何測試我的應用程序的最大容量來響應請求?爲什麼當有很多請求時應用程序會自行掛起?

+1

檢查在tomcat/logs目錄中發生了什麼,然後在這裏發佈,我確定catalina.out有話要說 –

+0

您應該問問自己,您期望應用程序執行什麼操作? – home

+0

您需要閱讀的時間http://www.catb.org/~esr/faqs/smart-questions.html –

回答

0

我不明白爲什麼在請求過多時應用程序出現故障?

如果你問的是一個具體的應用,答案是我們也不知道,而且我們也沒有任何證據可以推斷出問題的可能性。尋找證據的地方:

  • 檢查服務器的日誌。
  • 如果您有反向代理,請檢查代理的日誌。
  • 檢查後端數據庫日誌。
  • 檢查系統級性能統計信息;例如尋找虛擬機抖動,磁盤I/O過載等等的證據。
  • 檢查病理性GC行爲。
  • 檢查阻塞/堵塞的線程,指示併發瓶頸,死鎖等。

如果你問在一般情況下,可以有任意數量的原因:

  • 暗戰外部資源(如數據庫連接)
  • 創建線程太多
  • 嘗試對每個請求進行排隊以避免丟棄請求以及其他破碎的策略。
  • 併發瓶頸
  • 病態算法或數據庫查詢設計導致在負載下衰減的性能。
  • 損壞的錯誤恢復;例如欠載,你開始得到意想不到的異常,這會觸發資源泄漏。
  • 等等...

以及如何測試響應請求其最大容量我的應用程序...

創建一個測試工具反覆請求發送到您的服務器,並查看服務器可以維持的速率。有現成的freameworks這樣做。

0

爲什麼你認爲應用程序被絞死?可能只是做一些長期運行的操作?

「掛在太多的請求上」聽起來像是用盡了資源(例如數據庫連接),但是,在這種情況下,您應該在日誌中的某處看到某個異常堆棧跟蹤,或者您有一些併發問題。

要知道肯定,你需要做線程轉儲,看看所有的線程是否做你期望他們做的。您只需在開始時注意應用程序的線程(數據庫線程,邏輯和servlet線程),因爲Tomcat或SQL服務器內部不太可能存在一些錯誤。通過查看日誌(或者如果需要,添加它們),嘗試找到應用程序停止行爲的地方,如您所期望的那樣。

+0

謝謝維克多。 – JackAss

+0

我需要學習如何測試我的應用程序。 – JackAss

相關問題