Nginx 和 Apache 在Linux 下的性能表现谁更好?
程序员文章站
2022-04-05 18:45:04
...
回复内容:
这样的对比确实是不科学的。 我们不能仅仅因为两者做了相似的事情(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 下的其他如反向代理、静态文件访问等都出现问题。 更糟糕的是可能会导致进一步的 fork,占用更多的句柄、数据库连接等。
但请知晓,Apache 也是支持 FastCGI 的。
Nginx 的迅速崛起,真实的原因是『异步』这一方式才是解决大流量高并发的关键点。 另外,摩尔定律的失效后,CPU 的发展趋势就是多核心,而异步正是充分发挥多核心性能的最重要手段。
此外,从运维成本上来说,一个安装完后需要大量修改配置,和另一个安装完后只需要加上自己的特殊配置的方案,普遍意义上的用户们用脚投票,自然是后者更友善一些。
两个 Web Server 我都很喜欢。 从我做起,不参与,不发起,任何类型的圣战。
懂的自然懂。 都是 HTTP 服务器 / 反向代理服务器,怎么就叫“作的事情都不一样”了?
跑小文件算是 nginx 欺负人,看反向代理 php-fpm 好了
http://blog.celingest.com/en/2013/02/25/nginx-vs-apache-in-aws/
很明显可以看出,在傻大粗笨的阶段 Apache 相当能干,因为它可以无尽得开线程 / 进程去枪战系统资源;当你认真要做一个足够高效的系统,Apache 很快会成为瓶颈。
现在一般都倾向于 Nginx 了吧。 根本就不是同一层面的问题,他们做的事情都不一样,你想比较什么?