`

实战 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 相关模块和程序,让你的网站都能全速前进。进入讨论组讨论。

分享到:
评论

相关推荐

    fastcgi的一点资料

    2. **实战FastCGI.doc**:可能详细介绍了如何在不同Web服务器环境下设置和优化FastCGI。 3. **FastCGI中文参考手册.doc**:提供了官方或社区编写的中文文档,包括API接口、错误代码和配置选项。 4. **深入研究...

    实战Nginx取代Apache的高性能Web服务器_文字版

    本实战指南旨在探讨如何通过Nginx实现高性能的Web服务,以提升网站的响应速度和稳定性。 一、Nginx与Apache的性能对比 1. 并发处理:Nginx采用异步非阻塞I/O模型,可以同时处理大量并发请求,而Apache则采用多进程...

    实战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实战最全教程.zip

    在实际部署中,Nginx常与PHP-FPM或FastCGI配合,实现动态内容的处理。 接着,我们会详细探讨Nginx的配置文件结构。Nginx的配置文件通常位于`/etc/nginx/nginx.conf`,由多个块(如http、server、location等)组成,...

    黑客模拟实战之-ASP+PHP环境的完整安装

    2. **PHP解释器**:对于IIS,需要安装FastCGI或者PHP for IIS扩展来支持PHP运行。在XAMPP或WAMP中,PHP已经包含在内。 3. **数据库服务器**:如MySQL或SQL Server,ASP和PHP都能与其配合实现数据交互。 4. **开发...

    实战Nginx:取代Apache的高性能Web服务器+张宴.扫描版

    2. **Nginx安装与配置**:书中详细介绍了在各种操作系统上安装Nginx的步骤,以及如何配置Nginx服务器,包括基本的配置文件结构、指令语法和模块配置等。 3. **静态文件服务**:Nginx在处理静态文件如HTML、CSS、...

    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目录** 在IT行业中,Nginx是一个广泛应用的高性能Web服务器和反向代理服务器,以其高效、稳定和灵活的配置而备受青睐。本文将深入探讨Nginx的基本配置与优化,帮助读者更好地理解和掌握这个强大的工具。...

    Nginx企业级WEB服务器实战

    ### Nginx企业级WEB服务器实战 #### 一、Nginx概述 Nginx(发音为“engine X”)是一款高性能的HTTP服务器、反向代理服务器,同时也是IMAP/POP3/SMTP服务器。它最初由Igor Sysoev为了满足俄罗斯访问量排名第二的...

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

    《实战Nginx取代Apache的高性能Web服务器》一书,主要探讨了如何利用Nginx这一现代、高性能的Web服务器来替代传统的Apache服务器,以提升网站的运行效率和响应速度。Nginx以其异步非阻塞的I/O模型、模块化设计以及...

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

    2. PHP配置:在location块中设置fastcgi_pass,指定PHP-FPM的监听地址。 3. PHP参数:如fastcgi_param指令传递环境变量给PHP,如SCRIPT_FILENAME表示PHP脚本路径。 六、Nginx的日志管理 1. access_log:记录客户端...

    集群好书《高性能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服务器

    2. 轻量级:Nginx启动快,内存占用少,资源利用率高,这使得它在处理大量并发请求时表现出色。 3. 反向代理和负载均衡:Nginx可以作为反向代理服务器,隐藏后端服务器,提高网站安全性;同时,它能实现负载均衡,...

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

    当需要执行如PHP脚本等动态内容处理时,Nginx可以通过与FastCGI、uWSGI等进程管理器配合来高效地执行。 10. 安全性:Nginx内置了一些安全特性,比如限制客户端请求速率、防止DDoS攻击、提供SSL/TLS加密通信等。 11...

    LAMP网站架构图实战总结

    2. Nginx/Apache + PHP (fastcgi) + eAccelerator:Nginx或Apache通过fastcgi方式运行PHP,提高效率。 3. Nginx + Apache + PHP + eAccelerator:Nginx处理非PHP请求,Apache专司PHP,两者通过内部重定向配合。 在...

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

    第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