`

实战 FastCGI(2)

    博客分类:
  • CGI
阅读更多

4. FastCGI 有多快?


看完安装 FastCGI 的阿帕契模块,以及无聊的程序设计注意事项后,我们来看看一些可以让人振奋精神的数据,效能比较 (bench mark) 总是计算机玩家的最爱 :-)


4.1 评比工具 - ApacheBench

在阿帕契服务器的套件中,有一个叫做 ab (ApacheBench) 的工具。ApacheBench 主要是用来测试阿帕契服务器执行效率用的,我们就以 ApacheBench 做为 CGI vs. FastCGI 的评比工具。


ApacheBench 可以针对某个特定的 URL 仿真出连续的联机请求,同时还可以仿真出同时间点数个相同的联机请求,因此利用 ApacheBench 可帮助我们在网站开发期间仿真实际上线可能的情况,利用仿真出来的数据做为调整服务器设定或程序的依据。 ApacheBench 的用法如下:


Usage: /usr/local/apache/bin/ab [options] [http://]hostname[:port]/path

Options are:

-n requests Number of requests to perform

-c concurrency Number of multiple requests to make

-t timelimit Seconds to max. wait for responses

-p postfile File containg data to POST

-T content-type Content-type header for POSTing

-v verbosity How much troubleshooting info to print

-w Print out results in HTML tables

-x attributes String to insert as table attributes

-y attributes String to insert as tr attributes

-z attributes String to insert as td or th attributes

-V Print version number and exit

-k Use HTTP KeepAlive feature

-h Display usage information (this message)


假设我们要对 echo.fcg 做测试,仿真 1000 次的联机请求,而且同一时间有 20 个并行的 (concurrent) 联机请求的情况,只要在命令列模式下执行


$ ab -n 1000 -c 20 http://localhost/fcgi-bin/echo.fcg

稍等一会,ApacheBench 会把结果秀出来,


This is ApacheBench, Version 1.3

Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Copyright (c) 1998-1999 The Apache Group, http://www.apache.org/


Benchmarking localhost (be patient)... Server Software: Apache/1.3.6

Server Hostname: localhost

Server Port: 80

Document Path: /fcgi-bin/echo.fcg

Document Length: 995 bytes

Concurrency Level: 20

Time taken for tests: 6.859 seconds

Complete requests: 1000

Failed requests: 0

Total transferred: 1142000 bytes

HTML transferred: 995000 bytes

Requests per second: 145.79

Transfer rate: 166.50 kb/s received


Connnection Times (ms)

min avg max


Connect: 0 4 61

Processing: 62 128 771

Total: 62 132 832


以上结果指出,在同时间 20 个联机请求 (Concurrency Level) 的情况下,完成 1000 次的联机请求,共花了 6.859 秒 (Time taken for tests),因此这个程序每秒平均可以处理 (Requests per second) 145.79 个联机请求。

在接下来的评比测试中,我们就以每秒可以处理的联机请求数目来做为效能评比的依据。


4.2 CGI vs. FastCGI

前面提过利用 fcgi_stdio.h 函式库编译出来的 FastCGI 程序也兼容于 CGI 模式,因此我们只要把 fcgi-devkit-2.1 套件附的范例程序 echo.fcg 复制到 /cgi-bin 目录下,并且把文件名改成 echo.cgi,这支范例程序就可分别以 CGI 模式和 FastCGI 模式来执行,并且做比较。


首先分别对 CGI模式执行的 http://localhost/cgi-bin/echo.cgi 以及 FastCGI 模式的 http://localhost/fcgi-bin/echo.fcg 连续送出 10, 100, 1000, 10000 次的联机请求,得到的平均每秒可处理的请求 (Requests per second) 结果为:


联机数目 10 100 1000 10000

CGI 52.63 53.08 52.24 51.49

FastCGI (static mode) 204.08 224.22 146.78 207.14


接下来再分别以 Concurrency Level 为 10, 50, 100 的情况下做测试,得到 Requests per second 结果为:


Concurrency 联机数目 10 100 1000 10000

10 CGI 38.31 46.55 53.61 55.09

10 FastCGI 185.19 208.33 162.63 177.14

50 CGI 27.25 33.16 50.72 53.99

50 FastCGI 92.59 176.37 196.58 196.88

100 CGI 17.92 24.84 48.14 52.84

100 FastCGI 86.21 187.27 195.54 193.17


由上述数据看来,对同一支程序 (echo.c) 而言,使用 FastCGI 模式来执行,速度提升了 3-4 倍。可见得 FastCGI 对网站程序的效能提升上具有相当大的助益,尤其当使用量很大时,其效益更加明显。


以上的测试条件并不是十分严谨,主要在让你了解使用 FastCGI 之后对于效能及速度上一个概括的比较,也提供一个可供网站开发者可以评量的依据。


实际上,对一个初始化动作复杂,例如要先和数据库建立联机,或是配置内存,做变量初始化的程序来说,使用 FastCGI 可以比原先 CGI 在效能上增加更多,速度更快。而对一个有数据库可联机数目限制的系统来说,使用 FastCGI 就好象一个 Application Server 一样,不用担心 CGI 一次 fork 太多,超过联机数目上限 (FastCGI 可以设定一次跑几支)。


4.3 找出 Memory Leak

善用 ApacheBench 这个工具,还可以帮助网站程序发展人员找出在 FastCGI 程序中隐藏的 Memory Leak 臭虫。


每一支 FastCGI 程序在处理完一个联机请求后的状况都应该相同,我们利用 ApacheBench 对欲测试的程序送出上百次或上千次的联机请求以仿真实际上线的状况,如果发现程序占用的内存愈来愈多而且不会减少的话,表示程序有 Memory Leak 的问题。


虽然对 FastCGI 程序而言,当它一直不断吃掉系统资源到资料耗尽后会自动退出 (core dump 或是 exit) ,释放所占用的资源然后再重新激活,但这将会影响系统其它功能的正常运作,所以撰写 FastCGI 程序一定特别小心。进入讨论组讨论。


5. 参考

如果你想更进一步了解 FastCGI ,在 FastCGI 的首页上可以找到相关的所有资料,包含 FastCGI 的发展规格,软件下载,说明文件等。FastCGI 首页的网址是 http://www.fastcgi.com/


FastCGI 也有一个邮件讨论区 (mailing list),你可以寄 email 至

fastcgi-developers-request@idle.com

在邮件的主旨 (Subject) 处填上 subscribe 即可。但是在发问之前,请先把说明文件或安装文件看清楚,或是到邮件讨论区的档案 (mail archive) 中先找找问题是否已经有人问过而且有人回答过了,以免浪费重复的网络资源。如果你发现了 mod_fastcgi 模块或 fcgi-devkit 发展套件的错误或严重的问题,FastCGI 的发展小组会很热心的帮你想办法解决。

FastCGI 还有许多不同的用法,以及特别的应用,就有待您亲自去探索了。希望本文能帮助有心使用 FastCGI 的朋友可以顺利地安装 FastCGI 相关模块和程序,让你的网站都能全速前进。进入讨论组讨论。

分享到:
评论

相关推荐

    实战Nginx.取代Apache的高性能Web服务器

    实战Nginx.取代Apache的高性能Web服务器 电子工业出版社 319页 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 1.4 Nginx与Apache、Lighttpd的综合对比 第2章 ...

    nginx实战-nginx

    第1章 Nginx简介.pdf第2章 Nginx服务器的安装与配置.pdf第3章 Nginx的基本配置与优化.pdf第4章 Nginx与PHP(FastCGI)的安装、配置与优化.pdf第5章 Nginx与JSP、ASP.NET、Perl的安装与配置.pdf第6章 Nginx HTTP负载...

    实战nginx-张宴

    分享Nginx的实战经验 不可多得的Nginx一手资料 联系博文视点 序言 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx的发展 1.3 选择Nginx的理由 1.4 Nginx与Apache、 Lighttpd的综合对比 第2章 ...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    1.7 实战Nginx与PHP(FastCGI)的安装、配置与优化 1.7.1 什么是 FastCGI 1.7.2 Nginx+FastCGI运行原理 1.7.3 spawn-fcgi与PHP-FPM 1.7.4 PHP与PHP-FPM的安装及优化 1.7.5 配置Nginx来支持PHP 1.7.6 ...

    实战Nginx:取代Apache的高性能Web服务器

    实战Nginx:取代Apache的高性能Web服务器,这是一本很不错的书。能够帮助大家搭建一个高性能的web服务器 第1章 Nginx简介.pdf 第2章 Nginx服务器的安装与配置.pdf 第3章 Nginx的基本配置与优化.pdf 第4章 Nginx与PHP...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    张宴《实战Nginx:取代Apache的高性能Web服务器》pdf电子版下载,此资料网友共享,请购买作者正版书籍. 目录介绍: 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 ...

    Nginx高性能WEB服务器视频.rar

    7企业实战Nginx+PHP(FastCGI)高性能服务器.rar 8 Nginx与Tomcat-PHP架构优化.rar 9 Nginxi配置优化及深入讲解.ran l0 Nginx Rewrite规则详解一.rar 11构建Nginx均衡LAMP高性能服务器,rar 12 Nginx日志分析及脚本...

    Nginx实战:取代Apache的高性能Web服务器

    第2章 Nginx服务器的安装与配置 第3章 Nginx的基本配置与优化 第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 ...

    Nginx高性能WEB服务器视频.zip

    7 企业实战Nginx+PHP(FastCGI)高性能服务器.ts 8 Nginx与Tomcat-PHP架构优化.ts 9 Nginx配置优化及深入讲解 10 Nginx Rewrite规则详解一.ts 11 构建Nginx均衡LAMP高性能服务器.ts 12 Nginx日志分析及脚本编写.ts ...

    高性能Linux服务器构建实战:运维监控、性能调优与集群应用

    从系统到服务再到原理,高级运维必修课,书中几乎没有一句废话,干货满满

    Ngnix学习指南电子版

    第2章 Nginx服务器的安装与配置 第3章 Nginx的基本配置与优化 第4章 Nginx与PHP(FastCGI)的安装、配置与优化 第5章 Nginx与JSP、ASP.NET、Perl的安装与配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 第7章 ...

Global site tag (gtag.js) - Google Analytics