LUA与PHP在WEB应用的性能对比

  这几天用在WEB开发的LUA框架已经完成,框架中已包括数据库操作和模板操作的功能,能够很简单方便的应用在WEB开发上。在此时我对这个LUA框架和PHP开发的WEB应用分别进行充分的压力测试 ;)

  服务器配置:WEB服务器一台,压力测试服务器一台,均为双核+4G内存,CentOS 64位操作系统

  网络环境:局域网

  软件环境:yo2lua (50线程),Nginx+PHP-FPM (50进程)
       应用程序均为连接MySQL数据库查询1行数据并输出(表中就只有一行数据)

  压力测试软件:httperf+autobench

  操作命令行:autobench –host1=192.168.200.251 –port1=8001 –host2=v2.54xing.com –port2=80 –uri1=/ –uri2=/a.php –quiet –low_rate=500 –high_rate=5000 –rate_step=100 –num_call=1 –num_conn=10000 –timeout=10 –file /tmp/result.tsv
  从500并发起步,直到5000个并发,每次测试以10000个连接为基准取得平均值

result

  从测试结果中分析得出,PHP在并发数达到800的时候,性能出现严重的下降并且不稳定。而LUA则一直达到3200个并发时出现一次突发的性能下降,上升到3800个并发后性能下降一半并且不稳定,但依然能维持在2000个并发以上。

  这份简单的测试告诉我,LUA在WEB应用上,性能可以是PHP的4倍以上,并且LUA在3000个并发时,占用的服务器资源非常少,远比PHP要低得多。

  这个LUA的WEB开发框架定位就是简单、高性能,也许一些复杂的功能无法实现,我认为这部分功能可以转到PHP类的语言进行开发就可以,不必要把这个开发框架变得复杂庞大起来,不然就背离原来简单、高效的宗旨了 :P

  LUA跟C的无缝对接,彻底征服俺了 _-!! ~ 刚用一台四核8G内存的WEB服务器跑个压力测试,稳定达到4500个并发/秒。

  • sunseesiu

    结合LightCloud来使用就更完美了。 :lol:
    http://opensource.plurk.com/LightCloud/

  • http://www.ddig.info/ Qing

    :?: 好强大

  • http://blog.csdn.net/linkerlin Linker Lin

    我想关键是Lua不需要每个请求都去编译一次ByteCode的优势。
    我也非常喜欢Lua,欢迎来我的Blog看看。

    • oneoo

      @Linker Lin 嗯嗯,在 Web Server 启动的时候,整个框架的核心LUA代码已经编译好,加载在内存供服务上重复使用是一个很大的优势,并且数据库、memcached等的服务链接也是持久性的。但LUA比PHP高效跟多的是因为语言本身特点,LUA目前是完全的被整合到C写的Web Server上,而PHP还需要通过FastCGI等方式与Web Server结合,也许这就是个性能瓶颈~

      PHP也可以用APC这类代码缓存功能,实现编译一次ByteCode,重复使用哦 :)

      目前这个yo2lua框架已经应用在实际开发当中,压力测试下来,发现在HTML模板处理部分,用LUA来实现性能比较差。总体性能与PHP的差距不是很大,估计才1倍左右。如果可以尽量使用C来实现框架的核心功能部分,那么性能就可以非常高了。

      我也是刚开始接触LUA,有空多多交流 ;)

      • chenj

        模板解析是与生成好的吗?字符串连接应该是最后来做的吧?

        • http://oneoo.com oneoo

          是的,先做解析。最后连接输出

      • 啊暖

        我们都在争论php是否应当使用框架的时候,老大都已经使用LUA了,
        不知道使用代码缓存php是不是可以和Lua相差不多?

  • http://yyyyx.yo2.cn 应用语言系

    大大,发现一个问题,QQ安全中心已经将整个yo2.cn,包括主页和二级域名都列为不安全网站,请尽快和腾讯交涉!

  • snow

    我想 php可能没装opcode cache 装后会快很多
    还有php每个请求都要重新初始化环境,然后结束时销毁当然比较慢了

  • snow

    我推测可能应用的逻辑越复杂 两者相差越小

  • http://www.laruence.com/ laruence

    这个对比没什么意义
    恕我直言哈,
    首先Lua是轻量级的语言, 很多功能都要自己写, 就连简单的expolde/join都没有
    而PHP是一个全功能的,转为Web打造的语言,
    性能仅仅是一个指标, 但快速开发,易于维护,是更重要的一个因素.

    • oneoo

      确实是的,尤其是在业务场景下大量的数据库和文件IO,会严重影响到整体的效率

      但内存占用低倒很实在的~

      • http://www.laruence.com/ laruence

        恩, 是的,
        当然, 也有同学说Lua的extension很多, 加入进来也可以打造的很完善,
        但是这样的话, 你不是又弄出来一个PHP么? 呵呵

        另外, 我觉得Lua采用一个栈来和外部交换数据, 相比于PHP的采用结构/联合体来做, 是严格一些, 安全一些, 但是对性能的影响肯定也是有的,

  • glone

    请问下,那个性能展现截图,是啥软件弄出来的,能否给个网址

  • http://blog.csdn.net/ngwsx/ Ngwsx

    ngx_lua_module-1.0.5.0 (LUA编写网页脚本,支持windows和linux)

    http://blog.csdn.net/ngwsx/article/details/6648779