作者: 一網深情
** 請注意! **
測試結果很大程度上依賴於機器的硬體/軟體配置,並隨配置變化而產生差異,因此:
本測試結果 *僅供參考*
測試用硬體:
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