優化 Apache 效能

優化 Apache 效能

我正在尋找優化我們目前內部託管的網頁伺服器的方法。我正在努力提供盡可能多的相關的資訊如下。如果您需要更多資訊來提供協助,請告訴我。

伺服器正在運行 1 個網站,這是一個基於 Zend Framework(ver1)構建的線上披薩訂購平台。根據上個月的流量統計,每天大約有 6,000 次頁面加載,主要集中在晚餐時間。在此期間,尖峰負載量約為 1500 次/小時。

我們最近從 2/2mbit aDSL 線路升級到 100/100mbit 光纖,但晚餐時間仍有效能問題。我們假設 2mbit 是問題所在。網站在低負載時期非常活躍。

硬體

CPU: Intel(R) Xeon(R) CPU            5160  @ 3.00GHz (3000.13-MHz K8-class CPU)

Mem: 328M Active, 4427M Inact, 891M Wired, 244M Cache, 623M Buf, 33M Free
Swap: 16G Total, 468K Used, 16G Free
(6GB physical, 16GB swap)

Filesystem   Type     Size    Used   Avail Capacity  Mounted on
/dev/ad7s1a  ufs      4.8G    768M    3.7G    17%    /
devfs        devfs    1.0K    1.0K      0B   100%    /dev
/dev/ad7s1g  ufs      176G    5.2G    157G     3%    /home
/dev/ad7s1e  ufs      4.8G    2.8M    4.5G     0%    /tmp
/dev/ad7s1f  ufs       19G    3.5G     14G    19%    /usr
/dev/ad7s1d  ufs      4.8G    550M    3.9G    12%    /var

伺服器作業系統

FreeBSD 8.2-RELEASE

軟體

apache-2.2.17
php5-5.3.8
mysql-server-5.5

阿帕契足跡(範例取自#top)

31140 www              1  45    0   377M 41588K lockf   2   0:00  0.00% httpd
31122 www              1  44    0   375M 35416K lockf   2   0:00  0.00% httpd
31109 www              1  44    0   375M 38188K lockf   2   0:00  0.00% httpd
31113 www              1  44    0   375M 35188K lockf   2   0:00  0.00% httpd

Apache正在使用prefork MPM,APC(替代PHP快取)。 SSL 模組已加載,但未使用(因為實際上不起作用,因此未使用)。有一個包含 MPM 模組設定的文件,但正如我所見,它未包含在 httpd.conf 檔案中,因此 include 行已被註解掉。因此我猜 prefork MPM 也在預設值下工作。

以下是我發現的一些其他 Apache conf 值 - 包含在 https.conf 中

Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5

UseCanonicalName Off
HostnameLookups Off

遇到效能問題時載入

在此輸入影像描述

註:API請求後端

至於我們的線上平台,它透過 API (GET/POST) 與我們的後端系統進行通訊。對於購物籃的報價(快取直到新增商品)、產品(快取)、產品價格(快取)。當看到網路上出現效能問題時,後端伺服器實際上顯示了真實的負載。因此,我更傾向於認為 API 請求需要永遠完成,從而導致客戶端在 Web 伺服器上滯留。所以我的問題是,上面給出的統計數據(流量/負載)以及軟體的當前配置。與網路連線和硬體的規格相比,這是伺服器壓力過大的跡象嗎?根據可用資源和 Apache 的實際佔用空間,我是否能夠增加 Web 伺服器上的最大客戶端數量?

答案1

網站效能是一個大主題。從我看來,問題很可能不是 Apache。

不過,有一些事情可以幫助您提高表現。

  • 快取!我不知道你的 PHP 程式碼中緩存了多少。但由於您沒有使用 SSL 並且我猜您有很多只讀數據,請嘗試

  • 使能夠mod_expires

  • 分析您的網站/後端 API傑米特

答案2

不,以上並不是伺服器壓力過大的跡象。

雖然您可能會遇到網路 I/O 飽和(因為您沒有提供有關它的實際數據),但這種情況極不可能發生,因為高峰時段發生的實際請求很少。

您需要在 HTTP 後端執行一些測試,看看它是否以最大容量運行。如果是,那麼您需要解決這個問題。

為了將來的參考,您應該配置和使用伺服器狀態監控 apache 的處理程序,如下所示:http://httpd.apache.org/docs/2.2/mod/mod_status.html

答案3

Apache 效能可以透過 Worker MPM 和 Prefork 設定進行調整,更改 keepalive 和最大備用線程可以幫助提高效能並消耗更少的記憶體佔用,您可以從以下位置找到 Prefork 和 Worker 的最佳設定:這裡

答案4

您可能用完了進程(由MaxSpareServers和定義StartServers)。預設值僅為 10,因此如果您的回應時間較長,則可能不足以每 2 秒發出一個請求(1500 個/小時)。

開啟server-status模組以監控正在使用的進程。確保設定存取規則,以便只能在內部存取。

相關內容