Apache-2.2
如何在有大量並髮使用者的情況下提高我的 Drupal 站點的性能?
我有一個 Drupal 站點,它在發佈時可能會獲得很高的命中率。我們為首次發布租用了一個非常強大的伺服器,之後我們將縮減規模。該伺服器具有 Xeon E5-2670 8 核處理器 @ 2.6ghz 和 30gb 記憶體。
MySQL 已獲得大量記憶體,我已確認 MySQL 實際上是通過“top”使用該記憶體:
innodb_buffer_pool_size = 15G
PHP 已獲得大量記憶體(幾乎可以肯定,現在我注意到評論說“每個腳本”):
memory_limit = 6000M
Apache 配置是開箱即用的預設配置:
StartServers 8 MinSpareServers 5 MaxSpareServers 20 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000
我一直在執行 JMeter 測試(基本上“在站點上拋出盡可能多的執行緒並儘可能快地請求頁面”),我可以看到性能隨著並髮使用者數量的增加而下降:
- 5 個使用者:約 1 秒的平均響應時間
- 10 個使用者:約 1.3 秒的平均響應時間
- 20 個使用者:約 2.5 秒的平均響應時間
但是,機器上的負載仍然很低。在測試期間,“top”報告了 26gb 的可用記憶體,並且“uptime”的平均負載不超過 0.63。我懷疑我們仍然有很多資源可以用來提高性能,但 Apache 並沒有充分利用這些資源。也就是說,我是開發人員而不是系統管理員,我也不是伺服器性能方面的專家。
為了提高性能,我能做的最好的改進是什麼?
Drupal Answers可能更適合這個問題,但這裡有幾件事適合您:
- 盡可能在 Drupal 和伺服器上使用記憶體。
- 如果您的大部分流量都是匿名的,請考慮使用反向代理,例如Varnish。有一個模組可以幫助 Drupal 更好地利用 Varnish。如果您決定實施 Varnish,請使用它。
- 考慮使用類似memcache的東西。
- 如果您的 Drupal 站點是在 Drupal 6 中建構的,那麼請考慮將原始 Drupal 程式碼轉換為Pressflow Drupal站點(這很容易)。Pressflow 包含了許多性能優化(但如果您正在執行 Drupal 7,這還沒有實際意義)。
現在對於 Apache…. 不要使用開箱即用的 Apache 配置。您需要將 Apache 調整到您的站點。假設您正在使用
mod_prefork
(我會說這很有可能,但只有您可以確定)以下是其完成方式的基礎知識,但您真的應該僱用知道他們在做什麼的人。
- 找出您希望 Apache 能夠使用的最大記憶體量。
- 大量測試您的網站,並確定每個 Apache 程序使用多少記憶體(使用
top
)。- 取頂部使用記憶體最多的 Apache 程序,為它添加一點以作為衡量標準,然後將您的第一個數字(您希望 Apache 使用的最大記憶體量)除以這個新數字。
- 你得到的數字應該是你的
MaxClients
&ServerLimit
變數。這當然不是最終的答案。調整您的伺服器需要時間,並且需要經驗才能做到恰到好處。祝你好運。