横向压力测试:Ruby on Rails PK CakePHP

发表于:2010-12-07 10:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  摘要:文章介绍了PHP开发中常用框架CakePHP与著名的MVC框架Ruby on Rails的横向压测,压力测试的目标集中在Ruby On Rails和CakePHP的效率。

  Ruby on Rails以优雅的MVC架构闻名,这个架构如此诱人和美丽,而CakePHP则是PHP开发中常用的框架之一。如果你不想束缚于传统的PHP的砖头式开发,那么你可以尝试转向MVC架构,不过Rails的性能和部署问题一直让人担心。

  两者对比的话题在网上众说纷纭,很少见到客观而有说服力的论证和充分模拟实际环境下的压力测评。作为架构选型的重要决定,我们既不能人云亦云,更不可凭空臆想,一定要有充分的测试数据才能帮助做出正确的决定。

  心动不如行动,立刻着手安排了仿真环境测试。第一步是设计测试方案:

  压力测试的目标集中在Ruby On Rails和CakePHP的效率,所以采用同样的Nginx生产环境,但避开所有数据库操作以避免瓶颈转嫁到数据库影响结果。

  代码的主要部分都是通过输出128000个4位的十进制随机数,来模拟总计约500KB的页面数据输出。调用的指令都很基本,对脚本测试来说很公平。

  不过既然是虚拟高压力测试,实际环境中数据库读写等操作的时间开销应该有一个仿真替代,所以通过Sleep 200ms来仿真具有高度数据压力的服务端。当然我们都知道Sleep是没有真实的cpu开销的,所以不会影响测试结果的公平。

  测试工具使用经典的ApacheBench。先后测试10并发100请求(-c 10 -n 100) 的中等压力,和200并发5000请求(-c 200 -n 5000)高压测试。

  环境

  1. OS: FreeBSD 8.1  
  2. CPU: Intel 4核心 Core 2  
  3. RAM: 4GB 内存  
  4. PHP环境:nginx+php-fpm(5.3.3)+APC  
  5. Rails环境:nginx+passenger+Ruby(1.8.7) on Rails(3.0.0)  
  6. 所有软件均使用ports安装 

  fpm的优化配置:

  1. pm.max_children = 1000 
  2. pm.start_servers = 20 
  3. pm.min_spare_servers = 5 
  4. pm.max_spare_servers = 1000 

  passenger的优化配置(nginx.conf):

  passenger_max_pool_size  300;//4GB内存最大的允许值,再追加便无法启动passenger

  通过Rails脚本创建Test App:

  rails new dummy

  Ruby on Rails 代码:

  • // app/controller/test_controller.rb  
  • class TestController < ApplicationController 
  •   def index  
  •     sleep(0.2)  
  •   end  
  • end// app/views/test/index.html.rb  
  • <% 128000.times do %><%=rand(8999)+1000%><% end %>
  •   PHP代码:

    1. // vsruby.php  
    2. php   
    3. usleep(200000);  
    4. echo "<html><head>head><body>";  
    5. for($i = 0; $i < 128000;$i++)  
    6. {  
    7.   echo mt_rand(8999,9999);  
    8. }  
    9. echo "body>html>"; 

    41/41234>
    《2023软件测试行业现状调查报告》独家发布~

    关注51Testing

    联系我们

    快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

    法律顾问:上海兰迪律师事务所 项棋律师
    版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
    投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

    沪ICP备05003035号

    沪公网安备 31010102002173号