Nginx 和 Apache 在Linux 下的性能表現誰更好?


這樣的對比確實是不科學的。 我們不能僅僅因為兩者做了相似的事情(Web Server)就認為以此結果做判斷。 我個人對『匿名用戶』貼鏈接貼圖的說明表示並不贊同。

另外,同樣反對聖戰。 我們做技術的,應理智的堅持了解實現細節而非片面的從結果去看待產品。 問題修改為『在 Linux 下,Nginx 是不是在一般要比 Apache 性能更好?為什麼?』會更客觀一些。

對比一下:

  1. Nginx 在靜態文件性能上略強於 Apache,主要得益於其非同步 IO 模型。

  2. Nginx 在並發能力上限這點上遠超prefork 的 Apache,但如果 Apache 開啟 MPM,兩者的差距就不太明顯了,核心關鍵點在於 Apache 作為老牌 Web Server ,有沉重的歷史包袱,默認採用 select 模型而非僅只在2.6內核上才能支持的 epoll。 Multi Processing + Multi threading是另外一個原因,降低了prefork 模式下 fork 過多的進程耗光句柄或內存的可能。
  3. 在內存佔用方面,Apache 默認啟動了更多的模塊,對各類 RFC 遵循得更為標準,因此確實也比 Nginx 略大,但優化過後差距並不是特別明顯。
  4. 在 CPU 佔用方面,Web Server 其實都不是 CPU 密集型,Apache 再次背負一個包袱就是 PHP、Perl甚至是新的一些語言的支持默認都是以模塊的形式支持甚至是更低效的 CGI 1.0/1.1技術,而非是以 FastCGI 的方式執行。 Nginx 則捨棄了這些,使得所有語言都只能以 FastCGI 等非同步機制執行。

    因此,默認方式下的 Apache 可能會佔用較多的 CPU,進而使得同一 Web Server 下的其他如反向代理、靜態文件訪問等都出現問題。 更糟糕的是可能會導致進一步的 fork,佔用更多的句柄、資料庫連接等。

    但請知曉,Apache 也是支持 FastCGI 的。

Nginx 的迅速崛起,真實的原因是『非同步』這一方式才是解決大流量高並發的關鍵點。 另外,摩爾定律的失效後,CPU 的發展趨勢就是多核心,而非同步正是充分發揮多核心性能的最重要手段。

此外,從運維成本上來說,一個安裝完後需要大量修改配置,和另一個安裝完後只需要加上自己的特殊配置的方案,普遍意義上的用戶們用腳投票,自然是後者更友善一些。

兩個 Web Server 我都很喜歡。


根本就不是同一層面的問題,他們做的事情都不一樣,你想比較什麼?


從我做起,不參與,不發起,任何類型的聖戰。

懂的自然懂。


現在一般都傾向於 Nginx 了吧。


都是 HTTP 伺服器 / 反向代理伺服器,怎麼就叫「作的事情都不一樣」了?

跑小文件算是 nginx 欺負人,看反向代理 php-fpm 好了

http://blog.celingest.com/en/2013/02/25/nginx-vs-apache-in-aws/

很明顯可以看出,在傻大粗笨的階段 Apache 相當能幹,因為它可以無盡得開線程 / 進程去槍戰系統資源;當你認真要做一個足夠高效的系統,Apache 很快會成為瓶頸。


推薦閱讀:

Arch Linux的用戶都有理想主義傾向嗎?
如何看Linux各發行版的出廠桌面環境不是很精緻?
按照我的這個簡歷描述的技能是否可以找到實習生或者直接的IT工作?
I/O會一直佔用CPU嗎?
gnome2.x 和 gnome3 哪個更好?

TAG:PHP | Linux | Nginx | Apache |