Apache-2.2

Amazon AWS 微實例性能 - Apache2 和 PHP

  • November 9, 2011

我已經開始為在 Ubuntu 上執行 Apache2 和 PHP 的伙伴做一些工作,並且 CPU 已經達到頂峰。我真正想要的是關於使用 Micro 實例對於面向生產/面向公眾的網站是否是一個好主意的建議。我的直覺是否定的,使用標准或高實例會是一個更好的主意,但由於我才剛剛開始在 AWS 中玩耍,我只是想看看其他人做了什麼。

現在他確實執行了一些負載平衡,但他不得不關閉實例,我將考慮設置 Cloudwatch 為他自動執行此操作,直到我可以更好地處理他的應用程序的情況引擎蓋。

我知道這是一個非常模糊的問題,我沒有提供很多關於設置的細節,但我仍然在他的網站上加快速度。

簡短的回答:不要打折 t1.micro - 它是一個功能強大的實例,絕對可以執行一個 PHP 站點 - 但是如果你不能讓它與一個 t1.micro 一起工作,那麼就獲得一個更大的實例(而不是多個t1.micros)。

長答案:t1.micro 實例非常有能力生成動態內容 - 並且可以相當流暢地執行,為多個小型站點提供服務。對於優化良好的設置(假設是帶有記憶體的 Wordpress),我會說 t1.micro 應該每月至少處理 50k 次點擊,如果不是更多的話。不過,其中一個關鍵想法是,事情已經得到了很好的優化——預設的 Apache 安裝將相當快地關閉 t1.micro——因為每個請求都會產生一個新程序——以及所有相關的成本。

此外,t1.micro 預設沒有交換空間(設置一個 1GB EBS 卷用作交換空間可能會有所幫助 - 更多的是作為一種安全措施而不是實際使用它。如果您發現它被大量使用,那麼有些事情需要改變。

如果您要執行多個實例,我建議您不要使用多個 t1.micro 實例。在較大的實例(記憶體、I/O 和 CPU)上,每美元的性能要好得多。關於 t1.micro 的另一點是,雖然您可以“爆破”額外的 CPU,但也可以“偷走”週期。如果您要走 t1.micro 路線,絕對要使用 32 位實例 - 64 位寄存器的額外成本只會導致實例更容易耗盡記憶體,而沒有任何明顯的性能提升。

如果可能的話,我建議使用 php-fpm 而不是 mod_php - 雖然速度稍慢,但它能夠承受更大的流量,並且實例上的負載更少。此外,如果可能,解除安裝靜態內容的服務。對於後者,您可以使用諸如 Cloudfront 之類的 CDN(甚至使用 S3)——其想法是這些請求不會消耗實例的頻寬、磁碟 i/o 或處理能力(或記憶體)。或者,您可以使用輕量級前端伺服器(例如 nginx)來處理靜態內容,然後將動態請求代理回 apache(如果您不能完全切換到使用該前端伺服器) - 這確實增加了複雜性設置 - 但特別是如果您的頁面被記憶體(即,每當頁面更改時生成的靜態版本),性能增益可能是可觀的。

最後一個建議——這可能是不可能的——考慮使用亞馬遜的 Linux 作為你的作業系統而不是 Ubuntu。我發現它在 t1.micro 上非常輕巧且高效——它安裝了最少的軟體包,並且佔用空間非常小。

在 t1.micro 上執行動態網站當然是可行的——我在一個 t1.micro 上執行了幾個小站點(Wordpress/Drupal/Joomla)——都使用 nginx/apache/php-fcgi 和 varnish/nginx/php -fpm - 包括郵件伺服器 (postfix)、imap (dovecot)、數據庫 (mysql) 和 ftp 伺服器 (pure-ftp/vsftp) - 性能不錯(Wordpress 站點在 1-2 秒內載入),平均負載低(通常低於 0.1,每 15 秒請求一次),以及大約 150-200MB 的已用記憶體)。對於性能而言,這不是我的選擇,但對於只需要可靠線上且不期望有太多流量的站點來說,它是成本最低的解決方案。

我想說 t1.micro 是一個很好的平台來鍛煉你的優化技能——它可以讓你看到你可以從最低限度中得到多少,以及哪些優化會比它們的價值更昂貴。但是,如果您的站點對於單個 t1.micro 來說太大了,請使用更大的實例而不是額外的 t1.micro 實例(除非您的特定目的是故障轉移 - 但在那個階段您可能會使用更大的實例。) . 不要對 t1.micro 實例進行負載平衡 - 從這種方法中獲益甚少 - 更大的實例將為您提供更好的服務。然而,你肯定想知道為什麼這些實例會死掉——我敢打賭這是一個記憶體問題,而不是 CPU 問題。您肯定想嘗試啟動您網站的副本,然後執行ab(或seige等),看看伺服器可以承受什麼 - 以及它是否是應用程序的設計(您可能無法更改)或伺服器的設置。

(除非您使用的是 Spot 實例,否則您可以相當輕鬆地升級實例類型 - 只需停止(而不是終止),然後使用 ec2-modify-instance-attribute 更改類型,然後再重新啟動)。

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