簡體   English   中英

Apache KeepAlive 在 API 服務器上

[英]Apache KeepAlive on API Server

I have a LAMP server (Quad Core Debian with 4GB RAM, Apache 2.2 and PHP 5.3) with Rackspace which is used as an API Server. 根據我們的設置,我想知道 Apache 的最佳 KeepAlive 選項是什么。

  • API 服務器托管單個 PHP 文件,該文件以普通 JSON 響應。 這是一個相當大的文件,它執行一些 MySql 讀/寫和相當多的 Memcache 查找。
  • 我們有大約 90 個客戶在任何時候都登錄到系統中。
  • 大約 1/3 的客戶將處於空閑狀態。
  • 在活動客戶端(大約 60 個)中,它們每 3 秒向 API 發送一個請求。
  • 客戶端每 15 或 20 分鍾左右從活動狀態切換到空閑狀態,反之亦然。

啟用 KeepAlive 后,服務器會發瘋,memory 峰值接近 4GB(交換已啟用等)。 在 KeepAlive 關閉的情況下,memory 大小為 3GB,但我注意到 Apache 不斷地殺死並創建新進程來處理每個連接。

所以,我的三個選擇是:

  1. KeepAlive On 和 KeepAliveTimeout Default - 在這種情況下,我想我只需要獲得更多 RAM。
  2. KeepAlive On 和 KeepAliveTimeout Low(可能是 10 秒?)如果 KeepAliveTimeout 設置為 10 秒,客戶端是否會通過以 3 秒的定期間隔訪問資源來保持與該進程的持續連接? 當該客戶端空閑超過 10 秒時,該進程是否會被終止? 如果是這樣,我猜選項 2 看起來是 go 的最佳選項?

  3. KeepAlive Off這顯然最適合 RAM,但是由於為每個請求設置新進程所涉及的工作,它會影響響應時間嗎?

哪個選項最好?

看起來您的 php 腳本正在泄漏 memory。 在使它們長時間運行之前,您應該掌握這一點。

如果您對每個請求的 memory 使用情況以及從請求到請求添加 memory 不是一個真正的解決方案沒有一個好主意。 它現在可能會有所幫助,並在下周再次中斷。

我將繼續運行單獨的進程,直到 memory 管理得到控制。 如果您目前有響應問題,最好的選擇是添加另一台服務器來分散負載。

您應該檢查的第一件事是客戶端是否真的在使用 keepalive 功能。 我不確定您所說的“API 服務器”是什么意思,但如果它是某種 Web 服務,那么(IME)使用 keepalives 實現表現良好的客戶端相當困難。(請參閱 mod_log_config 的 %k 指令)。

另外,我們真的需要知道您的目標和限制是什么? 性能/容量/低成本?

這是在 HTTP 或 HTTPS 上運行 - 延遲有很大差異。

我會說 10 秒的保活時間高得離譜 - 一點也不低。

即使您有 90 個客戶端保持打開的連接,4Gb 似乎也是相當大量的 memory 供他們使用 - 我運行具有 150-200 個並發連接到復雜 PHP 腳本的系統,使用大約 0.5Gb 超過靜止使用。 你的 250 + 90 x 20M 的數字只給你大約 2Gb 的足跡(我知道不是那么簡單 - 但它並不復雜)。

對於您給出的數字,我不希望有任何好處-但 memory 占用空間要大得多-使用超過 5 秒的時間來保持活動。 您可能可以使用 2 秒的 keepalive 時間而不會顯着損失吞吐量,但是沒有什么可以替代測量各種配置的有效性 - 並分析數據以找到最佳配置。

當然,如果您發現您的客戶能夠利用 keepalives 並從中獲得可觀的收益,那么您需要找到適應這種情況的最佳方式。 使用線程服務器可能對 memory 的使用有所幫助,但您可能會發現在網絡服務器前運行反向代理會帶來更多好處 - 特別是 SSL。

除此之外,您還可以通過正常的調優獲得顯着的好處——代碼分析、output 壓縮等。

您應該考慮將 Apache 切換到基於事件或線程的 MPM,您可以在其中輕松使用KeepAlive On並將Timeout值設置為高,而不是管理KeepAlive設置,這在 3 個選項之間的特定情況下顯然沒有真正的優勢。

我會 go 還考慮在 Windows 上切換到 Apache。 這里的好處是它的 MPM 完全基於線程,並利用 Windows 對線程的偏好而不是進程。 您可以在 1-2GB 的 RAM 上使用 KeepAlive On 和 3-10 秒的超時輕松執行 512 個線程。

WampDeveloper Pro - Xampp - WampServer

否則,您唯一的其他選擇是將 MPM 從Prefork切換到 Worker...

Or to Event (which also got better with Apache 2.4)... http://httpd.apache.org/docs/2.2/mod/event.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM