CGI, mod_perl, PHP, JSP性能比较
作者: 一网深情
** 请注意! **
测试结果很大程度上依赖于机器的硬件/软件配置,并随配置变化而产生差异,因此:
本测试结果 *仅供参考*
测试用硬件:
CPU: Intel PII 300(66x4.5)
RAM: 192M
HD: IBM 20G(2M cache)
测试用软件:
OS: Slackware 7(自行编译的2.2.14核心)
Web: Apache 1.3.12(标准模块按缺省配置,所有模块静态编译)
PHP 4.0 RC1(加入了MySQL支持)
mod_perl 1.23(缺省配置,未加EVERYTHING=1)
ApacheJServ 1.1(缺省配置)
JDK: JDK 1.2.2
JSDK: JSDK 2
JSP: GNUJSP 1.0.0
JSP: GNUJSP 1.0.0
本测试是用Apache自带的Apache Bench(ab)进行的,命令为:
/www/bin/ab -c 20 -n 1000 CGI/脚本URL
此命令表示使用 20 个并发连接,进行 1000 次请求。
所有测试均在本机进行,各种测试均反复进行5次,去掉最大最小值后取平均值。
我分别测试了C写的CGI、Perl写的CGI、用mod_perl执行的Perl CGI、PHP和JSP。
各种CGI/脚本均输出内容相似的简单页面,内容如下:
html
body
h1The xxxx Hello Program/h1
p
Hello xxxx World!
/body
/html
测试结果(只取了最具代表性的 Requests per second 即每秒处理请求数这一项)
CGI/脚本类型 每秒处理请求数
C CGI 128
Perl CGI 69
mod_perl 223
PHP 237
JSP 21
除了JSP之外,其它几种CGI/脚本的表现大致是正常的。Perl程序解释执行,作为
CGI运行时又需要另外fork进程,所以最慢;mod_perl和PHP都直接在httpd内部运
行脚本,省掉了fork的消耗,所以快了很多;C程序虽然本应最快,但作为CGI 运
行时也是因为fork而使性能大打折扣。
至于JSP...我想这个结果并不具有代表性。毕竟测试用机只有192M内存,用top看
看,一个JAVA就占了11M。况且测试用机本身是一台Web server,测试时还有好几
十个httpd在跑
不过不管怎么说,在配置较低的服务器上,跑PHP、mod_perl在性能上要好过JSP
是肯定的。
附测试用程序:
C程序 hello.c
#include stdio.h
int main(void)
{
char s[] = "C CGI";
printf ("Content-Type: text/html ");
printf ("html "
"body "
"h1The C CGI Hello Program/h1 "
"p "
"Hello %s World! "
"/body "
"/html ", s);
return 0;
}
用 gcc -o hello hello.c 编译,把 hello 放到 cgi-bin目录下。
Perl程序 hello.pl
#!/usr/bin/perl
#!/usr/bin/perl
$s = "Perl CGI";
print "Content-Type: text/html ";
print <<DONE
html
body
h1The Perl CGI Hello Program/h1
p
Hello $s World!
/body
/html
DONE
把hello.pl放到cgi-bin目录下,兼作Perl CGI和mod_perl 脚本测试用。
PHP文件 hello.php
html
body
h1The PHP Hello Program/h1
<? $s = "PHP"; ?>;
p
Hello <? echo $s ?>; World!
/body
/body
/html
JSP文件 hello.jsp
html
body
h1The JSP Hello Program/h1
p
<% String s = "JSP"; %>;
p
Hello <%= s %>; World!
/body
/html
** 请注意! **
测试结果很大程度上依赖于机器的硬件/软件配置,并随配置变化而产生差异,因此:
本测试结果 *仅供参考*
测试用硬件:
CPU: Intel PII 300(66x4.5)
RAM: 192M
HD: IBM 20G(2M cache)
测试用软件:
OS: Slackware 7(自行编译的2.2.14核心)
Web: Apache 1.3.12(标准模块按缺省配置,所有模块静态编译)
PHP 4.0 RC1(加入了MySQL支持)
mod_perl 1.23(缺省配置,未加EVERYTHING=1)
ApacheJServ 1.1(缺省配置)
JDK: JDK 1.2.2
JSDK: JSDK 2
JSP: GNUJSP 1.0.0
JSP: GNUJSP 1.0.0
本测试是用Apache自带的Apache Bench(ab)进行的,命令为:
/www/bin/ab -c 20 -n 1000 CGI/脚本URL
此命令表示使用 20 个并发连接,进行 1000 次请求。
所有测试均在本机进行,各种测试均反复进行5次,去掉最大最小值后取平均值。
我分别测试了C写的CGI、Perl写的CGI、用mod_perl执行的Perl CGI、PHP和JSP。
各种CGI/脚本均输出内容相似的简单页面,内容如下:
html
body
h1The xxxx Hello Program/h1
p
Hello xxxx World!
/body
/html
测试结果(只取了最具代表性的 Requests per second 即每秒处理请求数这一项)
CGI/脚本类型 每秒处理请求数
C CGI 128
Perl CGI 69
mod_perl 223
PHP 237
JSP 21
除了JSP之外,其它几种CGI/脚本的表现大致是正常的。Perl程序解释执行,作为
CGI运行时又需要另外fork进程,所以最慢;mod_perl和PHP都直接在httpd内部运
行脚本,省掉了fork的消耗,所以快了很多;C程序虽然本应最快,但作为CGI 运
行时也是因为fork而使性能大打折扣。
至于JSP...我想这个结果并不具有代表性。毕竟测试用机只有192M内存,用top看
看,一个JAVA就占了11M。况且测试用机本身是一台Web server,测试时还有好几
十个httpd在跑
不过不管怎么说,在配置较低的服务器上,跑PHP、mod_perl在性能上要好过JSP
是肯定的。
附测试用程序:
C程序 hello.c
#include stdio.h
int main(void)
{
char s[] = "C CGI";
printf ("Content-Type: text/html ");
printf ("html "
"body "
"h1The C CGI Hello Program/h1 "
"p "
"Hello %s World! "
"/body "
"/html ", s);
return 0;
}
用 gcc -o hello hello.c 编译,把 hello 放到 cgi-bin目录下。
Perl程序 hello.pl
#!/usr/bin/perl
#!/usr/bin/perl
$s = "Perl CGI";
print "Content-Type: text/html ";
print <<DONE
html
body
h1The Perl CGI Hello Program/h1
p
Hello $s World!
/body
/html
DONE
把hello.pl放到cgi-bin目录下,兼作Perl CGI和mod_perl 脚本测试用。
PHP文件 hello.php
html
body
h1The PHP Hello Program/h1
<? $s = "PHP"; ?>;
p
Hello <? echo $s ?>; World!
/body
/body
/html
JSP文件 hello.jsp
html
body
h1The JSP Hello Program/h1
p
<% String s = "JSP"; %>;
p
Hello <%= s %>; World!
/body
/html
-----------
软件性能测试工作室:提供性能测试咨询、培训和项目指导
(QQ: 2225045276 E-Mail: Testing_is_believing@126.com)