`

Rails应用优化指南 (3)

阅读更多
优化GC

  了解了如何通过优化Ruby代码来提升我们的Rails应用性能,现在让我们更深入一些,来看看Ruby的内存管理和垃圾回收机制。

  首先,由于Ruby最初的设计目标是成为像Perl那样的批处理语言,因此它的内存管理机制并没有针对Rails这样的需要长期运行的服务端程序进行最优化,有些地方甚至是背道而驰:

Ruby的内存管理策略是尽量减少内存占用;
标记和清除算法十分简单;
使用malloc来分配连续的内存块(Ruby heap);
复杂的数据结构;
C扩展十分容易编写,但是当前的C接口很难实现generational GC(关于generational GC请参看[4])。
  其次,Ruby的垃圾回收机制对于Rails也不是最优的,由于Ruby的AST(抽象语法树)存储在堆上,并且在每次GC时都会被扫描一遍,而这恰恰是Rails中最大的一块非垃圾区,也就是说,GC对于Rails做的大部分工作都是在做无用功。

  并且,Ruby的清除算法依赖于堆的大小,而不是当前非垃圾区的大小,但是堆的增长存在一定限制,只有当进行GC后,当前的freelist < FREE_MIN,堆才会增加,gc.c中定义的增加值为4096,这对于Rails来说明显太小了,堆应该至少能够容纳20万个对象。

  要提高Ruby GC的性能,可以在Rails dispatcher中添加如下语句:

# excerpt from dispatch. Fcgi
RailsFCGIHandler.process! nil, 50



  这句话将禁止Ruby GC运行,在处理50个请求后再启用GC,但是这个方法存在一个问题,它没法区分小请求和大请求,这有可能会导致:

堆变的过大
小页面的性能受损
如果运行GC之后仍然没有足够的内存,Ruby还是会释放堆上的block
  除了控制GC的运行时机,我们还可以通过修改GC的参数来提升性能,但需要先给GC打补丁,下载最新的Railsbench,打上rubygc.patch补丁,然后重新编译并安装Ruby,就可以通过以下参数对GC进行调整了:

RUBY_HEAP_MIN_SLOTS, 初始堆大小,默认10000
RUBY HEAP FREE MIN,GC后可用的heap slot的最小值,默认4096
RUBY GC MALLOC LIMIT,允许不触发GC而分配的C数据结构的最大值(字节为单位),默认8,000,000
  我们的推荐值为:

  RUBY_HEAP_MIN_SLOTS = 600000

  RUBY_GC_MALLOC_LIMIT = 60000000

  RUBY_HEAP_FREE_MIN = 100000

  如果你进行基准测试的话,就会发现性能提高不少。

  优化模板

  好了,最后我们再讲讲模板优化,对于许多在编译时就知道结果的helper方法,完全没有必要在每次处理请求时都进行解析,比如:

<%= end_form_tag %> ===> </form>


  这纯粹就是浪费时间,还有我们前面提到的link_to,因此,如果我们可以在敲代码时确定这个helper的输出,那么最好直接写出结果。

  另外,还可以使用Ryan Davis的ParseTree和ruby2ruby来获取ActionView的render方法的AST,并进行模板终极优化:

展开所有helper方法
去除不会调用到的代码
去除不会用到的变量(以及partials)
合并hash
替换常量
替换结果已确定的方法调用
替换符号
  然后使用eval将新的AST编译入优化后的render方法。

  参考:

  [1] https://railsexpress.de/blog/files/slides/railsconf2006.pdf

  [2] http://railsexpress.de/blog/articles/2006/05/29/simpler-piggy-backing

  [3] http://www.letrails.cn/archives/18

  [4] http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)
分享到:
评论

相关推荐

    Agile Web Development with Rails 4th edition(敏捷Web开发与Rails:程序指南 第四版)

    8. **Testing**: 对于Rails应用,测试是必不可少的一部分。本书会教读者如何使用RSpec、Cucumber和FactoryGirl等工具进行单元测试、集成测试和行为驱动开发测试。 9. **Deployment**: 最后,书中还会介绍如何将开发...

    应用Rails进行敏捷Web开发中文第三版

    8. **安全与性能**:如何防止SQL注入、XSS攻击,以及优化Rails应用以提高性能。 9. **部署**:如何将Rails应用部署到如Heroku或AWS等云平台,以及配置Nginx或Apache作为前端服务器。 通过学习《应用Rails进行敏捷...

    Rails 3 in Action

    10. **部署与优化**:讲解如何将Rails应用部署到各种服务器环境(如Heroku、AWS),并提供了性能调优的建议。 《Rails 3 in Action》不仅覆盖了Rails 3.1的核心概念和技术,还涵盖了从开发到部署的全过程,是Rails...

    rails2-sample

    这些知识对于深入理解和优化Rails应用至关重要。 #### 5. Models, Views, and Controllers(模型、视图和控制器) MVC是Rails的核心架构之一,这一章节将详细介绍这三个组件的作用和相互关系。模型负责与数据库...

    rails框架指南.pdf

    其次,尽管Rails在提高开发效率方面做得很好,但它在性能优化方面可能不如某些竞争对手,对于大型或性能要求极高的应用,可能需要额外的优化工作。 Rails框架的成功原因之一在于它采用了“一站式”解决方案。不像...

    使用Rails开发Facebook平台应用

    - **集成Facebook API**:详细讲解如何将Facebook API集成到Rails应用中,实现用户登录、数据同步等功能。 ##### 3. 成功策略:营销与优化 - **增长黑客**:分享关于如何利用增长黑客技巧增加应用用户数量的方法。...

    Rails recipes

    综上所述,Rails Recipes是一本全面而深入的Rails指南,它不仅可以作为程序员解决具体问题的工具书,还可以作为提升 Rails 开发技能的进阶读物。无论是Rails新手还是经验丰富的开发者,都能从中获益,学会如何像大厨...

    rails cookbook

    8. **部署**:将Rails应用部署到生产环境,如Heroku或AWS。 9. **性能优化**:缓存策略、数据库优化和其他提高应用性能的方法。 10. **错误和调试**:如何追踪和修复常见的Rails问题。 通过这本书,读者不仅可以...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:读者已经具备一定的Ruby编程基础,并对Web开发有一定的了解。 #### 二、什么是Rails...

    Crafting Rails 4 Applications

    - **代码优化技巧**:提供了多种方法来优化Rails应用程序的性能,如缓存策略、数据库查询优化等。 - **测试与调试**:讲解了如何有效地进行单元测试、集成测试及端到端测试,并提供了调试技巧。 - **安全性**:讨论...

    Beginning Rails 3

    2. **性能优化**:Rails 3在性能方面做了大量工作,包括减少内存使用、提高请求处理速度等,使得应用运行更加流畅。 3. **模块化**:Rails 3将框架分解成多个可独立使用的组件,如ActiveRecord、ActionController等...

    Agile Web Development with Rails 3nd Edition Beta

    本书的内容涵盖了Rails框架的基础知识,包括安装配置环境、搭建开发环境、创建第一个Rails应用等。作者深入浅出地讲解了Rails的路由系统、数据库交互(ActiveRecord)、控制器与动作、视图模板以及测试驱动开发(TDD...

    The Rails 3 Way(2nd)

    3. **易于维护**:良好的设计模式和清晰的代码结构使得Rails应用易于维护和扩展。 4. **强大的生态系统**:Rails拥有庞大的社区支持和丰富的插件资源,这为开发者提供了极大的便利。 #### 四、读者群体与应用场景 ...

    Agile+Web+Development+with+Rails中文版.pdf

    《Agile Web Development with Rails》是一本经典的Rails开发指南,中文版的出版使得更多的中国开发者能够深入理解并应用敏捷开发方法与Ruby on Rails框架。这本书是Rails开发者的必备参考资料,它详细介绍了如何...

    rails-api-4.0.0

    Rails API 4.0.0是Ruby on Rails框架的一个版本,专门针对构建应用程序接口(APIs)进行了优化。Ruby on Rails是由David Heinemeier Hansson创建的开源Web应用框架,遵循MVC(模型-视图-控制器)架构模式,以其简洁...

    Ruby on Rails入门权威经典

    对于更高级的主题,例如部署到服务器、性能优化、安全性和API开发,本书也会提供基础的引导,帮助读者了解实际生产环境下的Rails应用运维。 总的来说,《Ruby on Rails入门权威经典》是一本内容丰富、实践性强的...

Global site tag (gtag.js) - Google Analytics