• 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
    ----------- 软件性能测试工作室:提供性能测试咨询、培训和项目指导 (QQ: 2225045276 E-Mail: Testing_is_believing@126.com)
  • 相关阅读:
    001 数电 (1) : 数制和码制
    js页面滚动浮动层智能定位(MooTools)实例页面
    Value  of type java.lang.String cannot be converted to JSONObject 错误解决
    关于线程池的shutdown()方法
    Can't create handler inside thread that has not called Looper.prepare()
    配置 Win7 和 IIS7 以支持WCF
    复制JSON对象
    js页面滚动浮动层智能定位(jQuery)实例页面
    Enum和string的相互转换
    TBCompressor 2.4.2修改版,可对目录中的JS/CSS文件进行压缩
  • 原文地址:https://www.cnblogs.com/preftest/p/2090658.html
Copyright © 2020-2023  润新知