Nginx Fastcgi_cache 性能 - 磁盘缓存 VS tmpfs 缓存 VS 静态文件

5

两个警告:提高性能是一种瘾头,你挤出的每一点都会让你想要更多。英语是我的第二语言,如有任何错误请谅解。

无论如何,我正在比较不同情况下使用nginx对WordPress网站的性能表现,并发现了一些奇怪的问题。所以我来这里与大家分享,也许可以调整我的期望值。

Software                                                                            
#       NGINX 1.4.2-1~dotdeb.1                                                          
#       PHP5-CGI 5.4.20-1~dotdeb.1                                                      
#       PHP-FPM 5.4.20-1~dotdeb.1                                                       
#       MYSQL Server 5.5.31+dfsg-0+wheezy1                                              
#       MYSQL Tuner 1.2.0-1                                                             
#       APC opcode 3.1.13-1 

这是一台EC2小型实例。 所有测试都使用SIEGE进行,40个并发请求持续2分钟。 所有测试均从localhost > localhost进行。 场景一 - URL通过fastcgi_cache缓存到TMPFS(内存)中
SIEGE -c 40 -b -t120s 'http://www.joaodedeus.com.br/quero-visitar/abadiania-go'
Transactions:                    1403 hits
Availability:                 100.00 %
Elapsed time:                 119.46 secs
Data transferred:              14.80 MB
Response time:                  3.36 secs
Transaction rate:              11.74 trans/sec
Throughput:                     0.12 MB/sec
Concurrency:                   39.42
Successful transactions:        1403
Failed transactions:               0
Longest transaction:            4.43
Shortest transaction:           1.38

场景二 - 通过fastcgi_cache缓存到磁盘上的相同URL(使用EC2实例存储 - 短暂存储)
Transactions:                    1407 hits
Availability:                 100.00 %
Elapsed time:                 119.13 secs
Data transferred:              14.84 MB
Response time:                  3.33 secs
Transaction rate:              11.81 trans/sec
Throughput:                     0.12 MB/sec
Concurrency:                   39.34
Successful transactions:        1407
Failed transactions:               0
Longest transaction:            4.40
Shortest transaction:           0.88

这里出现了第一个问题。我没有看到RAM和磁盘之间有很大的差异。这正常吗?我的意思是,使用RAM缓存没有太大的好处。

第三种情况 - 相同的页面,保存为.html文件并由nginx服务器提供

Transactions:                    1799 hits
Availability:                 100.00 %
Elapsed time:                 120.00 secs
Data transferred:              25.33 MB
Response time:                  2.65 secs
Transaction rate:              14.99 trans/sec
Throughput:                     0.21 MB/sec
Concurrency:                   39.66
Successful transactions:        1799
Failed transactions:               0
Longest transaction:            5.21
Shortest transaction:           1.30

这是一个主要的问题。这里有一个很大的区别。我的意思是,据我所知,从缓存中提供服务应该和提供静态的 .html 文件一样快,对吧?我的意思是- nginx 看到了位置的缓存规则并看到了已缓存的版本,就会提供它。为什么会有这样大的差异呢?

缓存工作正常

    35449 -
  10835 HIT
   1156 MISS
   1074 BYPASS
    100 EXPIRED

最好的问候。
1个回答

8
这里是nginx邮件列表调查的简短摘要(请参阅此处的线程):
首先,报告的数字非常低。它们应该更大,并且回答原始问题(“为什么有区别”)实际上没有意义。正确的问题应该是“为什么这么慢”。即使是EC2小实例也应该表现得更好。
在调查过程中,发现主机受CPU限制,gzip过滤器和pagespeed模块最耗CPU。
基本建议如下:
1.对于静态文件,请使用gzip_static。它允许提供预压缩版本并在运行时节省CPU。
2.避免使用高gzip压缩级别(gzip_comp_level)。高压缩级别需要比默认值(1)多得多的CPU,而大小差异很小。
3.尝试关闭pagespeed以查看是否有帮助。
使用gzip off; pagespeed off;报告了30倍的加速。

Maxim在nginx邮件列表上帮我解决了这个问题。 原来我的实时gzip压缩占用了全部CPU资源。他通过gzip_static指向了正确的方向。所以男孩们要记住,如果你想吸引很多普通用户,请不要使用高压缩等级,除非你有多余的CPU。节约并不值得。如果你预先压缩并使用gzip静态,请注意文件时间戳-压缩和未压缩必须具有相同的时间戳,这是最好的方法。 - ddutra
1
@ddutra,按照这些建议后,你的测试结果如何?他们是否得出了显著的结果? - Zhianc
@ddutra 任何信息都会对我有所帮助。 - Amir Bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接