回複內容:
這樣的對比確實是不科學的。 我們不能僅僅因為兩者做了相似的事情(Web Server)就認為以此結果做判斷。 我個人對『匿名使用者』貼連結貼圖的說明表示並不贊同。
另外,同樣反對聖戰。 我們做技術的,應理智的堅持瞭解實現細節而非片面的從結果去看待產品。 問題修改為『在 Linux 下,Nginx 是不是在一般要比 Apache 效能更好?為什嗎?』會更客觀一些。
對比一下:
- Nginx 在靜態檔案效能上略強於 Apache,主要得益於其非同步 IO 模型。
- Nginx 在並發能力上限這點上遠超prefork 的 Apache,但如果 Apache 開啟 MPM,兩者的差距就不太明顯了,核心關鍵點在於 Apache 作為老牌 Web Server ,有沉重的曆史包袱,預設採用 select 模型而非僅只在2.6核心上才能支援的 epoll。 Multi Processing + Multi threading是另外一個原因,降低了prefork 模式下 fork 過多的進程耗光控制代碼或記憶體的可能。
- 在記憶體佔用方面,Apache 預設啟動了更多的模組,對各類 RFC 遵循得更為標準,因此確實也比 Nginx 略大,但最佳化過後差距並不是特別明顯。
- 在 CPU 佔用方面,Web Server 其實都不是 CPU 密集型,Apache 再次背負一個包袱就是 PHP、Perl甚至是新的一些語言的支援預設都是以模組的形式支援甚至是更低效的 CGI 1.0/1.1技術,而非是以 FastCGI 的方式執行。 Nginx 則捨棄了這些,使得所有語言都只能以 FastCGI 等非同步機制執行。
因此,預設下的 Apache 可能會佔用較多的 CPU,進而使得同一 Web Server 下的其他如反向 Proxy、靜態檔案訪問等都出現問題。 更糟糕的是可能會導致進一步的 fork,佔用更多的控制代碼、資料庫連接等。
但請知曉,Apache 也是支援 FastCGI 的。
Nginx 的迅速崛起,真實的原因是『非同步』這一方式才是解決大流量高並發的關鍵點。 另外,摩爾定律的失效後,CPU 的發展趨勢就是多核心,而非同步正是充分發揮多核心效能的最重要手段。
此外,從營運成本上來說,一個安裝完後需要大量修改配置,和另一個安裝完後只需要加上自己的特殊配置的方案,普遍意義上的使用者們用腳投票,自然是後者更友善一些。
兩個 Web Server 我都很喜歡。從我做起,不參與,不發起,任何類型的聖戰。
懂的自然懂。都是 HTTP 伺服器 / 反向 Proxy伺服器,怎麼就叫“作的事情都不一樣”了?
跑小檔案算是 nginx 欺負人,看反向 Proxy php-fpm 好了
http://blog.celingest.com/en/2013/02/25/nginx-vs-apache-in-aws/
很明顯可以看出,在傻大粗笨的階段 Apache 相當能幹,因為它可以無盡得開線程 / 進程去槍戰系統資源;當你認真要做一個足夠高效的系統,Apache 很快會成為瓶頸。
現在一般都傾向於 Nginx 了吧。根本就不是同一層面的問題,他們做的事情都不一樣,你想比較什嗎?