Apache-2.2
為什麼我的請求排隊時間這麼長?
我正在執行 Rails 應用程序伺服器。我的設置是:
- Apache 2,對 https 和 ssl 客戶端證書使用 mod_ssl
- Phusion 乘客 5
- 導軌 4
- 紅寶石 2.1
我使用 NewRelic 來監控正在執行的應用程序。我最近啟用了對請求排隊延遲的監控,主要是出於好奇。我驚訝地發現請求隊列中的延遲通常與實際的 ruby 程式碼和數據庫執行時間一樣長或更長。~200 毫秒似乎很高,對吧?
大多數線上資訊表明,當請求隊列正在等待工作人員可用時會發生這種情況,但事實並非如此。如下所示,我們幾乎沒有使用我們預置的實例。在高峰期,我們很少會超過 30% 的使用率。
其他一些注意事項:
- Apache 和Passenger 駐留在同一台伺服器上,因此不會出現由於系統時鐘不同步而導致的錯誤計時問題。
- 關於 SSL 處理,Apache 獲取客戶端 SSL 證書並將其作為請求頭附加。然後,rails 應用程序處理其餘的處理。
這裡可能是什麼問題?
200ms似乎並不可怕。
before_filters
“請求排隊”指標是 Web 伺服器記錄請求和 New Relic 代理載入(之後)之間的時間度量。衡量這一點的方式可能會讓人覺得有問題,而實際上並不存在。您的延遲很好,甚至沒有尖峰表明您正在用盡工人或資源/ CPU 飢餓。你可以用watch passenger-status
這個來檢查。您還可以使用 Linux 實用程序在本地仔細檢查伺服器的資源使用情況:
top, iotop, vmstat, sar (systat)
仍然想尋找優化?檢查在 New Relic 代理之前執行的任何內容。可能的痛點:
這將需要一些探勘。祝你好運!