應用程式在高峰時間會變慢(有時),在 Tomcat 上運行,並使用 Apache 伺服器的反向代理,部署在 AWS 上

應用程式在高峰時間會變慢(有時),在 Tomcat 上運行,並使用 Apache 伺服器的反向代理,部署在 AWS 上

僅供序言:我是一名軟體開發人員,一開始沒有人知道發生了什麼,所以我做了一些測試和閱讀,並希望幫助我的同事解決這個問題。

問題:

問題是,在高峰時段,伺服器變得非常慢,以至於在chrome 等瀏覽器中連接逾時(30 秒後),但伺服器仍在運行,並且可以在大約100 秒後提供頁面(在失眠情況下測試)。我已經abs ...在生產伺服器上使用複製了這個問題,它與並發請求的數量有關,可能是由我們的 apache 伺服器的配置引起的。

更多資訊:

開發時我們在本地運行tomcat8,我用「abs -c 200 -n 2000 https:/[link]」測試過,執行時間很好。但測試生產伺服器時,即使有 50 個並發請求,我測試的 API 的速度也顯著下降:從 800 毫秒預設時間降至 27846 毫秒。

嘗試過的事情和更多細節:

我們運行了java melody,我想也許我們達到了tomcat執行緒的線程限制,所以我們將線程數從預設的200增加到500(這是在我進行測試之前)。當執行上述測試時,我可以看到繁忙的執行緒達到 500 個中的 50 個左右(在生產環境中運行,所以有些人實際上也在使用該程式),但不,它仍然慢了很多。

在高峰時段,我看到我們有大約 1000 個 http 會話,但線程、記憶體和 CPU 遠未接近 100%。只是為了確保我們將伺服器升級到最好的伺服器,但當然不是。我們正在使用 SQL,但 SQL 伺服器也沒有達到峰值,所以我懷疑這就是問題所在。

我知道我不應該模仿 JVM 參數,但看著類似的問題,我嘗試添加“-XX:ReservedCodeCacheSize=512M”,但這也不起作用。我還嘗試在 server.xml 中將acceptCount增加到1000,但它仍然不起作用。我應該撤銷這些變更嗎?我沒有註意到任何性能變化,據我從閱讀文件中得知,可以像這樣保留它。

我們有一個奇怪的功能,網路應用程式在閒置一段時間後會轉到主頁,然後每隔 xx 分鐘不斷刷新主頁。我認為這對性能不利,特別是如果用戶打開了很多選項卡並且開始刷新,這可能不是導致我們問題的原因,但值得一提。

我今天要嘗試的下一件事是弄亂 apache 伺服器參數。我正在讀一本調音指南MaxRequestWorkers / MaxClients 看起來可以解釋我們所經歷的情況。引用如果該指令太低,Apache 就無法充分利用可用的硬件,這會導致金錢的浪費以及高峰時段頁面加載時間的長時間延遲。

我將不勝感激任何提示。希望這只是 apache 伺服器,我至少可以讓伺服器今天可用。還有其他配置可能會導致速度變慢嗎?

答案1

您的網頁伺服器可能會因要求過多而阻塞,這實際上模擬了 SlowLoris DOS 攻擊,請檢查我的之前的回答關於這個話題。

相關內容