在 AWS 上比较 Nginx 和 Apache 的性能 —— Nginx 并不总是赢家!

红薯 发布于 2013/02/27 08:59
阅读 5K+
收藏 9

这是另外一个 Nginx 和 Apache 的比较?是的,但你应该继续读下去,因为该比较测试是在 AWS 云平台上进行的,使用了所有适合此次测试的各种资源,包括:ELB, EC2, EBS, RDS 和 ElastiCache。此外,Nginx 并不总是赢家!

nginx vs apache

基准测试场景

我们想要测试 Nginx (1.2.6) 和 Apache (2.2.23) 在不同请看下的性能表现,使用运行在 EC2 实例上的 WordPress 3.5.1,共享一个 GlusterFS 卷(基于EBS),一个 RDS(小) 实例和一个 ElastiCache 小实例。所有的这些都在一个 Elastic 负载均衡器之后。所有测试使用 php-fpm 进行,Apache 的 mpm_worker 和 Nginx 都配置只适用一个 worker,没有进行特别的调整。

Nginx Vs Apache in AWS: Infrastructure schema
Nginx Vs Apache in AWS: 架构图

下面是 Apache 和 Nginx 相关部分的配置:

httpd.conf

<IfModule worker.c>
StartServers         4
MaxClients         400
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
MaxRequestsPerChild  4000
</IfModule>

nginx.conf

user              nginx;
worker_processes  1;
error_log /var/log/nginx/error.log  info;
pid       /var/run/nginx.pid;
 
# Events Module
events {
    worker_connections  1024;
}
 
[...]
 
http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;
[...]
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    server_tokens off;
    keepalive_requests 100;
    keepalive_timeout  65 20;
[...]

我们使用 ApacheBench (2.3) 来运行测试: ab -n $(($concurrency*1000)) -c $concurrency http://www.mywordpressbenchmark.com/ 测试并发在 50 和 100 下进行,每个站 25 个并发用户使得 ELB 分发负载避免触发亚马逊的反 DDoS 检查。

测试的版本是 Nginx 1.2.6, Apache 2.2.23 运行在最新的 x86_64 Amazon Linux AMI, release 2012.09.

下面是测试结果:

m1.small EC2 instance: 1.7 GiB memory 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit)

m1.small: phpinfo()

m1.small: phpinfo()

m1.small: WordPress 3.5
m1.small: WordPress 3.5

m1.small: WordPress 3.5 and WP Super Cache 1.2
m1.small: WordPress 3.5 and WP Super Cache 1.2

m1.small: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)
m1.small: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)

c1.medium EC2 instance: 1.7 GiB of memory 5 EC2 Compute Units (2 virtual cores with 2.5 EC2 Compute Units each)

c1.medium: phpinfo()

c1.medium: phpinfo()

c1.medium: WordPress 3.5
c1.medium: WordPress 3.5

c1.medium: WordPress 3.5 and WP Super Cache 1.2
c1.medium: WordPress 3.5 and WP Super Cache 1.2

c1.medium: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)
c1.medium: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)


m1.large EC2 instance: 7.5 GiB memory 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each)

m1.large: phpinfo()

m1.large: phpinfo()

m1.large: WordPress 3.5
m1.large: WordPress 3.5

m1.large: WordPress 3.5 and WP Super Cache 1.2
m1.large: WordPress 3.5 and WP Super Cache 1.2

m1.large: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)
m1.large: WordPress 3.5 + HyperCache with Memcached (AWS ElastiCache)

 

结论:

从上述测试结果图表中我们可看到在小的实例上 Nginx 完胜,特别是在高并发下 Nginx 的事件驱动模型显示了其强大的实力,在单核实例上提升达 49%-201%。而在多核实例上 Nginx 有时候表现会稍微有点差,因为 workers = 1 的设置原因。而使用文件缓存和 memcached 对 Nginx 非常有利,性能提升 268%。从这个比较中我们可清楚的看到缓存 WordPress 是必不可少的。

加载中
0
wwek
wwek

因为 workers = 1 的设置原因。

有没有 workers = 1 和workers = cpu核心数 这两种情况下的对比~

--

淘宝的nginx 能自动 workers = cpu核心数

0
块块
块块
不是说apache2.4对性能进行了改善么,想看看2.4的具体表现怎么样
0
bigplum
bigplum
瓶颈在php,nginx的优势没发挥出来
0
GSMLG
GSMLG

引用来自“bigplum”的答案

瓶颈在php,nginx的优势没发挥出来
……
0
JSON.org.cn
JSON.org.cn
其余的配置怎么没亮出来?
0
y
ywq111

nginx为啥配置只使用一个cpu? 

一个cpu尚且跑出这个效果,如果配置多个cpu呢?@红薯 ,哪里来的文章呀?

0
月影又无痕
月影又无痕
真实情况是,现实中的性能瓶颈往往不在nginx本身,而在于网络IO,WEB应用程序,数据库等等关键环节。
返回顶部
顶部