Apache-2.2

為什麼我的請求排隊時間這麼長?

  • November 8, 2016

我正在執行 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 代理之前執行的任何內容。可能的痛點:

這將需要一些探勘。祝你好運!

引用自:https://serverfault.com/questions/797496