Ubuntu

如何在 Ubuntu 14.04 伺服器上調整 Apache

  • September 3, 2015

目前在 Ubuntu 14.04 上的 Apache 2(確切地說是 Apache 2.4.7)上,我有以下設置:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

該伺服器是一個 8GB (RAM) 的亞馬遜伺服器,它只是為一些Google廣告活動載入一個三頁的系統資料庫單。

我在網上找到了一個名為apachetuneit.sh的腳本,但過了一會兒 Apache 報告了這個錯誤:

$$ Tue Apr 21 16:45:42.227935 2015 $$ $$ mpm_prefork:error $$ $$ pid 1134 $$AH00161:伺服器達到 MaxRequestWorkers 設置,考慮提高 MaxRequestWorkers 設置 我如何判斷如何設置這些設置?

我只是專門詢問如何調整 Apache 2.4,僅此而已。這就是為什麼這個問題與這個問題不同。

  1. 認識到 Ubuntu 14.04 使用 Apache 2 和 PHP 通過一個mpm_prefork模組執行,其中一個可編輯的文件位於 /etc/apache2/mods-enabled/mpm_prefork.conf。此外,請認識到從 Apache 2.4 開始,MaxClients現在重命名為MaxRequestWorkers,因此任何有關 MaxClients 的文件都需要切換到 MaxRequestWorkers。
  2. 使用以下命令暫時停止 Apache Web 服務:
sudo 服務 apache2 停止
  1. 等待 5 秒,然後執行以下命令來查看伺服器上有多少可用的虛擬記憶體:
sudo free -ht

閱讀 Mem: 行並查看 free 列。將此視為您可以專用於 Apache 的 RAM 量,儘管我通常喜歡在更強大的伺服器上扣除 2GB(如 > 4GB),或者在更輕的伺服器上扣除 1GB。所以,如果免費專欄說我有 13GB 的免費空間,我會建議給 Apache 11GB。這是一個基線。如果我們偶爾在日誌中遇到任何數據庫問題(例如在 3 天內的日誌中出現 3 次)它需要更多記憶體,那麼我們可能會認為我們只有 10GB 可用而不是 11GB(在這種情況下)。如果我們在 Apache 日誌中遇到伺服器需要更多 MaxRequestWorkers,那麼這是一個單獨的問題,我將在下面解決。

  1. 啟動 Apache Web 伺服器。
sudo 服務 apache2 啟動
  1. 打開大約 10 個瀏覽器選項卡,從您的網站連接到一些較長或載入速度較慢的頁面,並在每個選項卡上刷新 3-4 次。
  2. 之後,現在快速執行以下命令:
sudo ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache 記憶體使用量 (MB):"x/1024; print "平均程序大小 (MB): "x/((y-1)*1024)}'

快速執行 5 次。

查看“平均程序大小”值,然後在執行該值的 5 次中取平均值。

現在進行以下數學運算,並確保根據需要將 GB 轉換為 MB,以便所有數字都以 MB 值表示。所以,要麼乘以 1024,要麼除以 1024,這取決於你需要走的路。

MaxRequestWorkers =可用基線(有緩衝區空間)/平均程序大小

例如,我有一個 14GB 的伺服器,但是當 Apache 停止時,伺服器顯示它使用了 1GB 空閒的 RAM。然後我為作業系統提供另外 1GB 的額外緩衝空間,以備不時之需。這意味著我將有一個 12GB 的免費基線。現在我必須將它從 GB 轉換為 MB,因此我乘以 12 x 1024 並得到 12288。12288 MB 是我的基線自由值。在我的例子中,我看到平均程序大小是 21MB。所以,我取 12288 / 21,我得到大約 585。現在,系統操作員通常會向下舍入這個值,所以我得到 580。

  1. 編輯文件 /etc/apache2/mods-enabled/mpm_prefork.conf 並考慮將其設置為以下預設值,將 XXX 替換為 MaxRequestWorkers 計算:

&lt;IfModule mpm_prefork_module&gt; StartServers 2 MinSpareServers 2 MaxSpareServers 5 MaxRequestWorkers XXX ServerLimit XXX MaxConnectionsPerChild 0 </IfModule>



請注意,您可能看不到 ServerLimit 參數。添加它。如果不存在此參數,則預設為 256,但需要與 MaxRequestWorkers 的值相同,否則您將收到錯誤消息。



8. Apache 配置中的另一個關鍵因素是帶有 Timeout 變數的 /etc/apache2/apache2.conf 文件,以秒為單位。這是在超時之前您可以從伺服器發送或接收的時間。您還必須記住文件上傳或文件下載,例如,如果您有一個網站,人們可以上傳或下載 CSV 或其他大文件。並且您需要記住一個繁忙的數據庫伺服器,並且您可能需要在頁面超時之前提供一些時間。使 Timeout 變數越小,Web 伺服器接收新連接的可能性就越大。但是請注意,將此值設置得太低可能會對 PHP 會話變數造成嚴重破壞,儘管不會對基於瀏覽器會話的 cookie 造成破壞。所以,例如,值 300(5 分鐘)可能對依賴於 Web 應用程序工作流的 PHP 會話變數而不是瀏覽器會話 cookie 的 Web 伺服器有好處。對於只提供靜態廣告登陸頁面的 Web 伺服器來說,45 的值可能是好的,但對於需要大量使用 PHP 會話變數的伺服器來說就很糟糕了。因此,將此文件中的 Timeout 參數編輯為您需要的數量。這可能需要對您的所有網頁進行一些測試,以查看該值是否太低。但是,除非您在大文件上傳或大文件下載中遇到問題,否則不要將其設置為高於 300 可能是個好主意。但是對於需要大量使用 PHP 會話變數的伺服器來說會很糟糕。因此,將此文件中的 Timeout 參數編輯為您需要的數量。這可能需要對您的所有網頁進行一些測試,以查看該值是否太低。但是,除非您在大文件上傳或大文件下載中遇到問題,否則不要將其設置為高於 300 可能是個好主意。但是對於需要大量使用 PHP 會話變數的伺服器來說會很糟糕。因此,將此文件中的 Timeout 參數編輯為您需要的數量。這可能需要對您的所有網頁進行一些測試,以查看該值是否太低。但是,除非您在大文件上傳或大文件下載中遇到問題,否則不要將其設置為高於 300 可能是個好主意。
9. 現在重新啟動您的 Apache Web 服務。如果你做錯了什麼,Apache 很可能會在你重新啟動它的那一刻告訴你,你可以糾正它。

sudo 服務 apache2 重啟



10. 現在重複您之前執行的 10 個選項卡瀏覽器技巧,並查看您是否在 Apache Web 伺服器錯誤日誌中遇到 Apache 配置錯誤:

sudo tail -f /var/log/apache2/error.log



...如果您願意,請按 CTRL+C 擺脫這種情況。



尋找關於需要 MaxRequestWorkers 的投訴(最近因為您重新啟動了 Web 伺服器)。如果您發現即使使用最佳 MaxRequestWorkers 設置,您的網站或 Web 應用程序也可能需要更多的火力。考慮以下選項:
  • 使用 CDN 下載大文件、圖像和腳本。
  • 使用 CloudFlare 等記憶體服務。
  • 重做您的網站或 Web 應用程序策略,以使用多個 Web 伺服器作為負載均衡器後面的一個“Web 應用程序”。
  • 向伺服器添加更多 RAM,從而重新進行此計算。

  1. 現在 Apache 伺服器已經調整,它是一種基線調整。您需要在 2-3 週內對其進行檢查,並在 Apache 錯誤日誌中查找 MaxRequestWorker 問題。由此,您可以做出優化決定(參見第 10 步)。您還可以在 Ubuntu 上使用 apt 安裝 Munin,並查看 Apache 的性能隨時間的變化,並在您決定需要對 Web 伺服器正在處理的流量量做任何事情之前繪製一個增長的想法。

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