与Apache相比,Nginx在Linux上performance更好吗?

由于Apache基于线程(每个新连接一个新线程)和nginx基于进程(每个连接到服务器的新连接一个新进程),所以Apache与Nginx的性能比较明智。 所以Nginx自基于进程以来performance更好。 但是,如果将它们部署在Linux上,则由于没有线程的直接概念,并且在Linux线程被映射为在内核级别上进行处理,这是否重要。 所以对于Linux上的Apache和Nginx,性能应该是一样的,但是Nginx比Apache好,为什么呢?

首先,stream程分叉通常比线程更有效。 这很大程度上取决于操作系统内核如何处理线程/进程。

众所周知,分叉进程在Unix系统上是一个简单而高效的任务,但是在Windows上很糟糕。 这意味着在Windows上使用线程可能会好得多,而在Unix上,这并不一定意味着线程比stream程更有效或更低效。

Apache 2.X允许以多种模式运行,包括产卵进程或使用线程池。

在网上有很多资源用nginx对apache进行基准testing。 由于不同的testing场景,每个基准的使用受到限制:

  • 服务器的configuration,尤其是 apache服务器
  • 要覆盖的工作量,静态内容和dynamic内容等
  • 基准利益:总体吞吐量,响应时间,响应时间的变化

留给你的最好的select就是在你的服务器上devise你自己的基准testing。 另请参阅此问题: https : //stackoverflow.com/questions/2528266/how-to-benchmark-apache-nginx-setup

你可能不太在意。

有趣的证据表明,当有很多连接的客户端没有做太多的事情时,Nginx可以提高内存的效率(考虑保持活跃,请求缓慢等)。 这意味着它可以在同一台机器上处理更多的空闲连接,这在某些types的Web服务器中很有用。

所以,如果你的所有客户端都超速,超级繁忙和低延迟链接(想象一下高度人造的负载testing系统),那么Apache可能会做的很好。 但是把一个真正的互联网和真正的客户组合起来,你会看到Nginx的优势。

Nginx不会为每个连接的客户端预留一个线程一个进程 – 它会asynchronous处理它们,这大大减less了空闲客户端产生的开销。

nginx是基于进程(对于每一个新的连接到服务器的新进程)

这是不正确的。 Nginx不会产生大量的工作进程来处理请求,但是每个人都可以同时处理多个请求,因为它是事件驱动的。 与Apache相比,这是它的许多优势的来源,因为它可以处理大量并发请求,并且处理数量相对较less。

至于表演,完全取决于情况; 在任何情况下,工具都不是最好的。