`
antter
  • 浏览: 2991 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

对于这两天ruby开发网站性能测试总结

阅读更多

这只是个人测试,也是个ruby初学者的测试,如果因优化不周而造成重大误差还请各位能多多指教。

  1. Rails vs Rack vs Merb:
    Rails 性能比Merb差不少,但文档,插件丰富,加上Rack可以高速处理某些需求。又闻Merb要并入Rails,高速处理又有Metal,真是前景无限。
    Rack 一个字快,爽。
    Merb 看上去很美,只是发觉文档太少。不太试合初学者,比如我想让ActiveRecord支持Enum类型,Merb似乎需要自已操刀,而Rails可以拿来就用
    速度上 静态>Rack>Merb>Rails
    速度横向比较
    静态 Rack Merb Rails
    速度 3130 1192 305 180

    (单位:reqs/sec)

  2. Cache:

    page缓存很方便,而且直接生成html,很容易实现全站静化,只是如果每个文件id都放于同一目录下,很难想像几万文件挤在一个目录下。cache还有待学习。似乎fragment能解决这个问题。
    对于很简单的helloworld,action缓存不快反慢。reqs由180下降到150。

  3. 服务器:
    Fastcgi比mongrel快不少。mongrel更易使用。我现在是 development用mongrel,production用fastcgi
    Nginx和lighttpd差不多快,
    apache2的mod_rails性能记得也不错,具体数值忘了,apache2太大型,内存占得多,配置灵活性没Nginx好,且在性能上和Nginx与Lighttpd有不小差距,所以不再予考虑。
  4. 我个人最终取向:
    Nginx+Fastcgi+Rails+Rack 作为我的Rails平台。

另外我的blog是  http://www.jiangmiao.org/blog  最近在学ruby中,ruby现在给我最大的感触就是灵活,方便。

 

2009-1-21补充:

  1. Fastcgi

    经过实践,发现在fastcgi上lighttpd略胜一筹,最佳的性能稳定Rails平台还是为公认的 Lighttpd+Fastcgi. 但不可否认nginx为非常优秀的服务器,特别是他的配置方式,我尤为中意。

  2. Cache

    提到的Fragment Cache与Page Cache为2个不同等级的cache,
    Page提供全文cache,在controller中以caches_page :actionName形式。
    Fragment为区域cache,在views中以 <% cache do %> xxx <%end%> 形式。
    关于Fragment Cache存储方式如文档中提到的

    #内存cache,也是默认的cache
    ActionController::Base.cache_store = :memory_store
    #以文件形式保存
    ActionController::Base.cache_store = :file_store, "/path/to/cache/directory"
    ActionController::Base.cache_store = :drb_store, "druby://localhost:9192"
    ActionController::Base.cache_store = :mem_cache_store, "localhost"
    ActionController::Base.cache_store = MyOwnStore.new("parameter") #重写自已的Store
    

    在environment可以添加语句 config.cache_store = xxx 进行设置

    网上很多文章因使用的rails版本已过时,仍以 fragment_cache_store= 作为教程存在,使人走了不少弯路。所以在rails升级或学习的过程中,阅读changelog是很有必要的。

    关于自定义Store网上教程似乎很少,但因其并不复杂,又因rails源码公开,大家可参考MemoryStore的源文件 memorystore_cache.rb
    如 class MyOwnStore < ActiveSupport::Cache::Store 并重写write,read等方法,则可以轻松制定Fragment的缓存方式。

    关于更多cache可以参考http://www.railsenvy.com/2007/2/28/rails-caching-tutorial 但注意该rails的版本也以过时,因为其log显示还是以Completed in 0.18700 (5 reqs/sec) | Rendering: 0.10900 (58%) | DB: 0.00000 (0%)形式。

分享到:
评论
4 楼 antter 2009-01-02  
上面的文章和你的机制是没啥关系。因为我对机制那些不太了解,也没啥发言权。只是站在普通用户,发表一下个人看法。哪个更稳定,哪个更快,支持负荷更高就用哪个。在测rack lighttpd的确要比nginx快,稳。

你的部署文章我已拜读过不下5遍,有log为证,因为我也发觉在fastcgi上lighttpd更有优势,理由可能和你不一样,你是机制怎样,缓冲区怎样等比较深度的比较。而我只是普通用户压力测试的结果。即然都觉得lighttpd好,我也就不去测别的比较到底好多少了。如果发现nginx和lighttpd目前表现还是一样,那我肯定要对你说的缓冲区大小对性的影响,或者进行更苛刻的条件之类进行测试。
3 楼 robbin 2009-01-01  
antter 写道
lighttpd的确比nginx好。
我在测式rack时,500并发,nginx会发生 Broken Pipe错误,不得其解,而lighttpd不会。
但lighttpd在log中会出现一些 "sockets disabled, out-of-fds"
我想Broken Pipe大概源于out of fds.
如此看来,lighttpd在fastcgi方面的确要比nginx更胜一筹


那时因为操作系统默认设置的文件描述符不够用了,你需要设置更大的文件描述符数量,这个可以通过lighttpd的配置文件设置,nginx也应该有类似的设置,这和性能无关。

事实上单纯看静态文件的处理速度、并发支持数量和资源消耗的节省度上来说,nginx要明显好于lighttpd,但在FastCGI支持上,nginx作为一个通用的http proxy,不可能像lighttpd那样专门为FastCGI去实现一些东西。当然你显然没有看过我写的文章。
2 楼 antter 2008-12-31  
lighttpd的确比nginx好。
我在测式rack时,500并发,nginx会发生 Broken Pipe错误,不得其解,而lighttpd不会。
但lighttpd在log中会出现一些 "sockets disabled, out-of-fds"
我想Broken Pipe大概源于out of fds.
如此看来,lighttpd在fastcgi方面的确要比nginx更胜一筹
1 楼 robbin 2008-12-31  
FastCGI如果是Rails的话,不推荐搭配nginx,一定要用lighttpd,原因我以前详细解释过了。当然如果你的应用很小,一般也不会碰到问题,用nginx也行。

相关推荐

    患者发生输液反应的应急预案及护理流程(医院护理资料).docx

    患者发生输液反应的应急预案及护理流程(医院护理资料).docx

    chromedriver-win64_121.0.6105.0.zip

    chromedriver-win64_121.0.6105.0.zip

    chromedriver-win64_120.0.6099.35.zip

    chromedriver-win64_120.0.6099.35.zip

    php+sql成绩查询系统(系统+论文+答辩PPT).zip

    php+sql成绩查询系统(系统+论文+答辩PPT).zip

    这是一个使用java开发的简单帝国古典象棋游戏.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    医院骨科资料:关节镜患者健康教育.docx

    医院骨科资料:关节镜患者健康教育.docx

    chromedriver-win64_121.0.6139.0.zip

    chromedriver-win64_121.0.6139.0.zip

    Java Swing实现的生命游戏.zip

    该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

    html匀速轮播案例js代码

    js代码

    用C语言开发的基于文件存储的图书馆管理系统.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

    (基于C语言版的YoloV3-tiny的口罩检测包含口罩VOC数据集).zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

    chromedriver-win64_117.0.5857.0.zip

    chromedriver-win64_117.0.5857.0.zip

    HPC集群性能测试工具-Clusbench-2.0.git845e7c8.x86-64.run

    Clusbench 是曙光开发的HPC性能测试工具,目前Clusbench支持主流X86平台(如Intel,AMD,Hygon)linpack基准测试、内存stream测试、dgemm测试、hpcg测试、IB带宽和聚合通信(alltoall)测试,且支持批量单机测试和整体(联机)测试。 自1.5版本起,Clusbench内置了测试需要的MPI并行库、运行时依赖,以及针对各个平台优化的linpack、stream、dgemm、hpcg、alltoall等程序,无需依赖于外部软件包即可完成测试。 当前最新版本为Clusbench-2.0,支持CentOS7.x/8.x、RedHat7.x/8.x、NFS3.x/4.x系统。

    html网页制作案例分享

    HTML个人简介网页案例简介 目的: 向初学者展示如何使用HTML语言创建一个基本的网页,用于展示个人信息。 案例内容: 一个HTML文档,包含以下部分: <!DOCTYPE html>:文档类型声明,标识HTML5文档。 <html>:根元素,包含整个网页内容。 <head>:包含文档的元数据,如字符集声明和文档标题。 <body>:包含网页的主体内容,用户可以直接看到的部分。 标题(<h1> 和 <h2>):用于展示网页的主要标题和子标题。 段落(<p>):包含文本段落。 无序列表(<ul> 和 <li>):列出个人信息,如姓名、年龄和职业。 关键点: HTML的基本结构和语法。 如何使用不同的HTML标签来组织内容。 文档的标题和元数据的重要性。 技术实现: 使用文本编辑器创建一个新的HTML文件。 编写HTML代码,包括文档声明、结构和内容。 保存文件,并使用浏览器打开以查看效果。 学习目标: 理解HTML文档的基本构成。 学习如何使用HTML标签来创建和格式化网页内容。 掌握基本的网页制作技能。

    numpy-1.26.4-cp39-cp39-win-amd64.rar

    numpy-1.26.4-cp39-cp39-win_amd64.whl由于从官网下载文件较慢,所以在此提供下载,本文件对应Python311版本为轮子文件,可通过pip安装

    chromedriver-win64_118.0.5974.0.zip

    chromedriver-win64_118.0.5974.0.zip

    linux下基于c语言实现,采用tcp协议的基于socket套接字通信的在线英语词典系统.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

    chromedriver-win64_116.0.5815.0.zip

    chromedriver-win64_116.0.5815.0.zip

    OpenNNA2.0,一个基于C语言(C99)的开源神经网络推理框架.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

    一个基于控制台界面的读心术小游戏(帮同学写的 C 语言结课作业)。.zip

    C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

Global site tag (gtag.js) - Google Analytics