[原创]Apache Rewrite对apache性能影响的测试

来源:互联网 发布:数据库评级都怎么问 编辑:程序博客网 时间:2024/06/10 00:35


Apache Rewrite对apache性能影响的测试


[ Apache rewrite规则 ]

Apache中这个rewrite规则能把http://localhost/heiyeluren/readme.txt 重写到 D:/kiss/wwwroot/h/e/i/heiyeluren/readme.txt

修改httpd.conf,增加:

RewriteEngine On
RewriteRule ^/(
[0-9a-z])([0-9a-z])([0-9a-z])([0-9a-z]+)/(.*) /$1/$2/$3/$1$2$3$4/$5 [L]

 

[ 性能测试 ]

使用 http_load 来进行页面访问测试 (下载http_load: http://www.acme.com/software/http_load/)
命令格式:http_load  -p 并发访问进程数  -s 访问时间  需要访问的URL文件

准备URL文件:tst.list,文件格式是每行一个URL,URL最好超过50个测试效果比较好,另外,测试结果中我们主要是关心 fetches/sec 这个选项,这个我们称之为QPS,大致就是一台服务器每秒能够相应的查询次数,下面看到的测试结果中的 xxxx  fetches/sec 就是每秒能够相应的查询次数,用这个来衡量性能。
PS:http_load 比 apache自带的 ab 要强不少,准确率也要高。


有rewrite,访问rewrite之后的URL

http_load -p 30 -s 60  tst.list
^[c137829 fetches, 26 max parallel, 275658 bytes, in 60.0003 seconds
2 mean bytes/connection
2297.14 fetches/sec, 4594.28 bytes/sec
msecs/connect: 0.0604275 mean, 11.447 max, 0.021 min
msecs/first-response: 2.70699 mean, 1190.06 max, 0.305 min


有rewrite,直接访问rewrite之前的URL

http_load -p 30 -s 60 tst2.list
148477 fetches, 30 max parallel, 296954 bytes, in 60 seconds
2 mean bytes/connection
2474.62 fetches/sec, 4949.23 bytes/sec
msecs/connect: 
0.058889 mean, 8.447 max, 0.02 min
msecs/first-response: 
2.52814 mean, 1324.63 max, 0.298 min


无rewrite,直接访问rewrite之前的URL

http_load -p 30 -s 60 tst2.list
151920 fetches, 29 max parallel, 303840 bytes, in 60 seconds
2 mean bytes/connection
2532 fetches/sec, 5064 bytes/sec
msecs/connect: 
0.0608508 mean, 153.375 max, 0.02 min
msecs/first-response: 
2.35597 mean, 1091.58 max, 0.259 min

 

有rewrite,但通过proxy实现

http_load -p 30 -s 60 tst.list
58586 fetches, 30 max parallel, 117172 bytes, in 60.001 seconds
2 mean bytes/connection
976.417 fetches/sec, 1952.83 bytes/sec
msecs/connect: 
0.0769494 mean, 100.978 max, 0.022 min
msecs/first-response: 
8.93129 mean, 1190.54 max, 0.871 min

 


[ 结论 ]

  • apache的rewrite会产生微小的cpu开销,导致一些性能损失,但这个损失并不特别明显,所以不要害怕rewrite,当然规则太多性能可能也会有影响,所以尽量不要太多规则
  • proxy很慢,且存在安全隐患(SSL是不支持proxy的),带[P]的rewriterule就是proxy。因此,除非万不得已(比如客户端js跨域),应尽量避免使用proxy。
  • proxy不是apache的专长,如果为了反向代理加速,squid通常是一个更合适的选择。


PS:最后感谢同事健祥同学提供测试结果和相应说明,我只是进行了一些文字优化。:-)


 




原创粉丝点击