2013-10-31 85 views
1

我正在用`ab'工具測試我的Apache & PHP設置(Ubuntu上的默認配置)。隨着2個併發連接我得到相當滿意的結果:優化Apache和PHP的併發性能

ab -k -n 1000 -c 2 http://localserver/page.php 

Requests per second: 184.81 [#/sec] (mean) 
Time per request:  10.822 [ms] (mean) 
Time per request:  5.411 [ms] (mean, across all concurrent requests) 

由於它是一個虛擬機與低內存,也沒關係。現在我想測試一個更現實的場景:同時連接100個用戶(讀取:連接)的請求:

ab -k -n 1000 -c 100 http://localserver/page.php 

Requests per second: 60.22 [#/sec] (mean) 
Time per request:  1660.678 [ms] (mean) 
Time per request:  16.607 [ms] (mean, across all concurrent requests) 

這更糟糕。雖然總體上每秒請求的數量並沒有明顯下降(184至60#/秒),但從用戶角度的每個請求的時間已經急劇增加(從10ms到平均超過1.6秒)。最長的請求花費了8秒鐘,並且在測試期間通過網絡瀏覽器手動連接到本地服務器需要將近10秒。

原因是什麼?如何將併發性能優化到可接受的水平?

(我使用的是默認配置隨Ubuntu Linux操作系統的服務器。)

+0

首先這不取決於本地腳本執行什麼?你可以使用memcache(d)嗎? –

+0

本地腳本正在執行一堆簡單的echo語句。我故意沒有包含任何數據庫工作。 – JohnCand

+0

如果它是一個內存不足的虛擬機,爲什麼不使用nginx,lighttp或其他? – Matt

回答

3

作爲開始,你需要看的記憶每個腳本消耗,即量。 memory_limit,然後用這個劃分VM內存。這應該是您可以同時處理的連接數量,而不會導致內存不足,從而導致服務器開始發生抖動。

您將獲得非常低的連接數量。所以,你需要

  • 增加內存
  • 下降memory_limit的
  • 使每個連接速度提升

下一個步驟將是看看是否有任何數據庫查詢需要比預期更長,我通常開始在查詢時間超過0.5s時查看mysql-slow.log還可以消除不使用索引的查詢(如果可以的話)。

接下來安裝像collectd這樣的監視工具,看看是否有足夠的CPU可用。

從商業角度來看,這取決於這是一個新的網站/系統還是現有的東西。如果它是新的並且增長劇烈,那麼你需要花費一段時間在硬件上花費過多的時間,一個無法正常工作的系統或者流量下的崩潰會非常快地侵蝕業務的信任。最重要的是,如果託管賬單每月低於1000美元,它通常不值得優化。如果這不便宜,那麼您可能需要回到您的商業模式。