ruby on rails应用性能优化之道

这是一篇我们运营JavaEye网站将近半年时间所得到经验的总结。目前在整个rails社区,都极少有运营rails大访问量网站经验的人详细的谈这个话题。至于国内,rails应用都停留在学习和尝试阶段,真正投入商业运营的基本找不到,所以谈这个话题为时太早,颇有对牛弹琴的感觉。所以权当是个人的总结性文章吧,也不会很详细的展开谈论,能对大家有所启发就好。

一、硬件

1、CPU
ruby解析器相对于JVM,PHP解析器来说,比较低效,可能会导致比较多的context switch,因此提高CPU和内存之间的总线带宽和传输速度会对ruby应用有比较大的性能提升。在目前主流的x86_64 CPU当中,AMD Opteron在CPU芯片内置内存控制器,可以有效提高CPU和内存数据交换速度,提高context switch能力。所以用AMD Opteron比Intel Xeon EM64T性能要好很多。

2、物理内存
ruby是以进程方式运行的,rails应用的并发响应能力主要取决于ruby进程的数量。一个最简单的rails应用,一个ruby进程占用的物理内存一般不过30-40MB,但是对于真正复杂的,而且数据库访问频繁,数据量大的rails应用来说,ruby进程稳定的物理内存占用至少100多MB,经常达到200多MB,甚至300MB。以开10个ruby进程计算,那么物理内存使用上限就是3GB,所以4GB物理内存是起码的。


二、操作系统

1、Linux distro
对于AMD x86_64的CPU来说,SLES要比RHEL有更多的优化。

2、32位版本还是64位版本
应该使用64位版本操作系统,以充分发挥x86_64 CPU的性能,并且x86_64的Linux很多Kernel参数也大很多,代价就是需要更多的物理内存。所以内存多多益善。

3、文件系统
rails会对每个浏览器会话在硬盘生成session文件,一个繁忙的网站,临时文件目录下面有上万乃至几万个session文件是很常见的现象。对于这种目录下面几万个小文件的存取,reiserfs要比ext3性能好很多倍。


三、Web Server

主流的选择是apache2.2,lighttpd,litespeed。apache2.2可以首先排除,lighttpd和litespeed都不错,但我会选择开源免费的lighttpd。至于lighttpd的各种优化参数这里不谈。


四、ruby的部署

1、ruby GC
可以使用railsbench提供的GC patch,以优化ruby内存使用,降低GC频率,提高throughput,代价就是ruby进程的物理内存占用加倍。所以物理内存越多越好,4G根本不够用,8G,16G绝对不嫌多。

2、FCGI还是mongrel
ruby进程可以以FCGI方式来运行,以FastCGI协议和Web Server通讯,也可以以HTTP Server方式来运行(即Mongrel),以HTTP协议和Web Server通讯,这两种方式性能上没有什么差异。FCGI方式,在单机上面通过Unix Socket和Web Server通讯,效率比走TCP Port要高。

3、开多少个ruby进程
ruby进程数量和web server的connection数量的比例没有定规,少了多了都会降低性能,要靠实践去摸索,也要参考CPU和内存资源的使用状况。


五、应用程序

1、避免使用component

2、hash的key使用symbol

3、对于ORM来说,数据库的表设计的原则是颗粒度应该小一些,把常用字段和不常用字段尽量分离到不同表,严重影响性能的大字段分离到单独的表

4、在不使用对象缓存的情况下,查询方法的:include可以预加载关联对象,避免n+1问题


六、缓存

1、rails的页面缓存,Action缓存和片断缓存
rails提供的缓存方式可以有效降低对应用服务器的负载,但是缓存颗粒度太粗,适应范围比较狭窄,缓存过期的处理比较烦琐。

2、对象缓存
rails应用本身是可以水平扩展的,性能瓶颈往往还是数据库访问,使用CachedModel对象缓存可以有效降低数据库负载,但CachedModel不像Hibernate二级缓存那么强大,不能够针对非主键查询进行缓存读取,不能针对非主键查询进行缓存填充,和file-column有冲突,需要自行覆盖model对象的save方法等等。另外在使用对象缓存的情况下,应该把查询方法的:include去掉,避免关联查询无法利用缓存的现象。

3、查询缓存
对于统计类耗时查询,如果不要求实时性,那么可以使用memcache-client将查询结果缓存到memcached里面。


七、Session的存储方式

由于Linux文件系统的高效性以及操作系统使用内存来做disk cache,因此默认使用硬盘文件保存session,并不会带来性能瓶颈,使用memcached并不会提高多少IO性能。如果一定要优化session硬盘读取,除了memcached,可以使用RAMDISK。
Tubi流媒体平台如何用Ruby on Rails提升开发效率与架构灵活性 在现代微服务架构中,技术选型常面临开发效率与系统性能的平衡挑战。Ruby on Rails框架以其'约定优于配置'的核心理念和丰富的Gem生态,为快速构建CRUD密集型应用提供了高效的解决方案。其技术价值在于通过ActiveRecord ORM、脚手架生成器和模块化设计,大幅缩短产品迭代周期,降低团队协作成本。在流媒体、广告技术等需要快速响应业务变化的场景中,Rails可作为'粘合剂'服务,高效构建内部管理平台与API网关。本文以Tubi的实践为例,展示了如何将Rails深度集成到微服务生态中,通过Side 阅读详情

相关推荐

Rack与Ruby on Rails的集成解析

本文详细探讨了Rack作为Web应用服务器与Ruby框架之间接口的作用,并解析了Passenger如何通过Rack与Rails框架集成以提高应用性能。文章还简要介绍了Ruby on Rails框架,特别是其MVC架构和约定优于配置的设计理念。

weixin_35815766的博客 653

[讨论]谈谈Ruby on Rails的性能问题

关于Ruby/Rails的讨论仍在团结友好而卓有成效地进行着。纯月摘要翻译了一篇“Rail开发中常见的性能问题”,但他对这篇文章有着明显的、无意或有意的误读。在前面列举的5个注意事项中,后3项:3 repeating identical computations during request processing(在处理请求过程中反复做同样的计算操作)4 reading too often a...

软件技术狂热者的专栏 223

提升Ruby on Rails性能的几个解决方案

简介 Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可实现非常易用的持久化,Github 和 Rubygems 上丰富多样的 Rails 插件是 Rails 开发高效率的又一有力保障。Rails 是一个真正彻底的 MVC(Model-View-Controller) 框架,Rails 清楚地将你的模型的代码与你的控制器的应用逻辑从 View 代码中分离出来。Rails 开发人员很少或者可能从未遇到

Ruby 语言的魅力:从 Web 开发到数据科学的广泛应用场景

Ruby 是一种高效、简单且功能强大的编程语言,自诞生以来便以其优雅的语法和丰富的功能而受到开发者的喜爱。尽管 Ruby 初次被人们广为接受是因为其在 Web 开发中的应用,但随着技术的发展,该语言的用途已扩展至多个领域。本文将深入分析 Ruby 的主要应用场景,并探讨它为何能在这些领域中占据一席之地。

guzhoumingyue的专栏 1623

对优化Ruby on Rails性能的一些办法的探究

1.导致你的 Rails 应用变慢无非以下两个原因: 在不应该将 Ruby and Rails 作为首选的地方使用 Ruby and Rails。(用 Ruby and Rails 做了不擅长做的工作) 过度的消耗内存导致需要利用大量的时间进行垃圾回收。 Rails 是个令人愉快的框架,而且 Ruby 也是一个简洁而优雅的语言。但是如果它被滥用,那会相当的影响性能。有很多工作并不适合用 Ruby and Rails,你最好使用其它的工具,比如,数据库在大数据处理上优势明显,R 语言特别适合做统计学相关的工作。 内存问题是导致诸多 Ruby 应用变慢的首要原因。Rails 性能优化的 8

SiC双向车载充电器技术解析与V2G应用

碳化硅(SiC)功率器件凭借其高击穿电场强度、优异热导率和低开关损耗特性,正在重塑电力电子系统的设计边界。作为第三代半导体材料的代表,SiC MOSFET通过降低80%的开关损耗,使车载充电器(OBC)效率突破96.5%。在双向能量转换架构中,图腾柱PFC与CLLC谐振变换器的组合实现了ZVS软开关,配合三维集成散热方案使功率密度达54W/in³。这些技术进步直接支撑了V2G(车辆到电网)应用场景,使电动车成为虚拟电厂(VPP)的关键单元。通过智能充放电策略优化,电池循环寿命可提升至4000次以上,为电力市

weixin_30693683的博客 275

可伸缩的高性能 Rails 应用程序开发和部署实践

Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可实现非常易用的持久化,Github 和 Rubygems 上丰富多样的 Rails 插件是 Rails 开发高效率的又一有力保障。Rails 是一个真正...

weixin_30871293的博客 268

PRPD图谱分析从入门到精通:5种典型放电模式的识别手册

本文详细解析PRPD图谱分析技术,重点介绍电晕放电、悬浮放电等5种典型放电模式的识别方法。通过37组真实案例对比,提供关键识别区和诊断流程图模板,帮助工程师快速掌握变电站设备状态监测的核心技能,提升绝缘缺陷诊断准确率。

weixin_29214199的博客 473

终极指南:如何用 Debugbar 快速优化 Ruby on Rails 应用性能

Debugbar 是一个专为 Ruby on Rails 设计的强大开发者工具,灵感来自 Laravel Debugbar。它能够实时监控应用程序性能,帮助开发者快速定位问题、优化代码执行效率。对于想要提升 Rails 应用性能的开发者来说,Debugbar 是一个不可或缺的调试神器!🚀 ## 🔍 Debugbar 核心功能揭秘 Debugbar 提供了全面的性能监控面板,让你对应用的每个

gitblog_00033的博客 642

OpenCV机械臂手眼标定

这篇文章总结了手眼标定的原理,利用OpenCV自带的函数套用参数即可完成眼在手上和眼在手外两种标定。

Q先森的博客 6593

人机协作新纪元:AI会抢走IT人的饭碗吗?

产品经理用自然语言描述需求,AI将其转化为技术规格书(准确率已达89%)

819

如何在Ruby on Rails中集成redis-rails?5分钟快速上手指南

想要为你的Ruby on Rails应用添加高性能的Redis存储支持吗?redis-rails正是你需要的终极解决方案!这个强大的gem包为Rails开发者提供了完整的Redis存储套件,包括缓存、会话管理和HTTP缓存功能。无论你是新手还是经验丰富的开发者,这篇快速指南将帮助你在5分钟内完成redis-rails的集成配置,让你的应用性能得到显著提升。 ## 📦 什么是redis-rail

gitblog_01138的博客 917

SC-FDMA

<br />SC-FDMA(Single-carrier Frequency-Division Multiple Access,單載波分頻多工),是LTE的上行鏈路的主流多址。<br />SC-FDMA是單波載(Single-carrier),與OFDMA相比之下具有的較低的PAPR(峰值/平均功率比,peak-to-average power ratio),比多載波的PAPR低1-3dB左右(PAPR是由于多載波在频域叠加引起)。更低的PAPR可以使行動終端(mobile terminal)在發送功效方面

jod的专栏 3299

Ruby on Rails 性能调优:数据库查询优化与缓存策略

Ruby on Rails 应用的性能调优是一个复杂且持续的过程,数据库查询优化和缓存策略是其中的重要环节。通过合理优化 SQL 语句、创建合适的索引、调整数据库连接池,以及采用合适的缓存策略和有效的缓存失效机制,可以显著提高应用的性能。同时,借助性能监控和测试工具,及时发现和解决性能问题,不断优化应用,为用户提供更流畅、高效的使用体验。随着应用的不断发展和用户需求的变化,开发者还需要持续关注性能优化,不断探索和应用新的技术和方法,以保持应用的竞争力。

数字魔方操控师的博客 820

【系统分析师】第1章-基础知识:绪论(核心总结)

《系统分析师教程(第二版)绪论》概述了系统分析师的核心角色与知识体系。作为信息系统开发的核心复合型人才,系统分析师需具备技术、业务、管理及道德等多维能力,贯穿需求分析、系统设计、协调沟通和质量保障全流程。知识体系涵盖系统工程方法论(如霍尔三维结构)、信息技术基础(数据库/网络技术)及管理学数学基础。教程梳理了该职业从数据处理专家到现代技术整合者的演变历程,并指出职业发展路径(初级分析师至CTO)。第二版新增大数据/AI等前沿内容,强化案例与实践,是软考官方权威教材,为读者构建系统化的学习框架。

数据知道的博客 6909

智能 Agent 跨模态决策机制实战:多源数据融合与感知驱动行为策略设计

随着智能 Agent 应用从结构化文本处理拓展至图像识别、语音交互、传感器响应等多模态环境,其决策机制也面临从单模态语言理解向“多源感知驱动行为选择”的系统跃迁。本文聚焦跨模态输入下的 Agent 决策体系,系统性解析多源数据建模、感知融合方式、模态对齐机制、输入权重控制策略与策略引擎适配路径,进一步结合多模态提示构建、模态感知异常检测、模态优先级路由调度等工程问题进行实战拆解。通过企业级智能客服、制造车间控制、智慧医疗助手等典型案例,本文提供面向真实场景的跨模态 Agent 架构与多输入决策融合方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1353

揭秘Ruby on Rails性能瓶颈:5个关键优化策略让你的应用飞起来

解决Ruby Web开发中常见的性能瓶颈,本文揭示5个关键优化策略,涵盖数据库查询、缓存机制、资产压缩等核心场景。通过Rails惰性加载、连接池调优和反向代理配置,显著提升应用响应速度与并发能力,适合中大型项目优化参考,值得收藏。

FastProceed的博客 786

9.9华为OD机试真题 新系统 - 受限任务分配 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【受限任务分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【受限任务分配】多语言题解。

qq_45776114的博客 733

RailsDevs开源贡献完整指南:如何参与这个Ruby on Rails反向招聘平台项目的开发

想要为开源项目贡献代码但不知从何开始?RailsDevs这个创新的Ruby on Rails反向招聘平台为你提供了绝佳的机会!🚀 作为专为Rails开发者设计的求职平台,RailsDevs采用独特的"反向招聘"模式,让开发者主动展示技能,等待企业主动联系。本文将为你提供完整的开源贡献指南,帮助你快速上手这个激动人心的项目。 ## 📋 什么是RailsDevs反向招聘平台? RailsDev

gitblog_00818的博客 806

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Redis-Rails完全指南:为Ruby on Rails打造高效Redis存储解决方案 [特殊字符]

想要为你的Ruby on Rails应用提供**高性能Redis存储解决方案**吗?redis-rails正是你需要的完美工具!这个强大的gem为Rails开发者提供了完整的Redis存储套件,包括缓存、会话管理和HTTP缓存功能。在本文中,我们将深入探讨如何利用redis-rails优化你的Rails应用性能,实现快速、可靠的存储解决方案。 ## 📦 什么是redis-rails? red

gitblog_00504的博客 793

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Rails-Perftest进阶指南:深度理解并优化GC运行对Rails应用性能的影响 [特殊字符]

在Rails应用开发中,性能优化是一个永恒的话题。**rails-perftest**作为Rails官方性能测试工具,能够帮助开发者深入分析应用性能瓶颈,特别是垃圾回收(GC)对性能的影响。本文将深入探讨如何利用rails-perftest监控和优化GC运行,提升你的Rails应用性能表现。 ## 📊 什么是rails-perftest? **rails-perftest**是从Rails核

gitblog_00867的博客 618

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ruby-prof实战案例:如何识别和修复Rails应用性能瓶颈

ruby-prof是一款强大的Ruby性能分析工具,能够帮助开发者精准定位Rails应用中的性能瓶颈。本文将通过实际案例,展示如何使用ruby-prof识别并修复Rails应用的性能问题,提升应用响应速度和整体性能。 ## 为什么选择ruby-prof进行Rails性能分析? 在Rails应用开发过程中,随着功能迭代和用户量增长,性能问题逐渐凸显。ruby-prof作为专业的Ruby性能分析工

gitblog_00409的博客 1110

Rails Ruby Bench:真实世界的Ruby性能基准测试工具

Rails Ruby Bench:真实世界的Ruby性能基准测试工具 项目介绍 Rails Ruby Bench(简称RRB) 是一个基于Discourse的基准测试工具,旨在测量Ruby语言的速度。尽管其主要目标是Ruby性能测试,但它也可以用于测量其他相关技术的性能。RRB是一个“真实世界”的基准测试工具,因为它运行在一个复杂的Rails应用中,模拟了大量并发请求和复杂的操作场景。这使得它非常...

gitblog_00551的博客 985

Rails Ruby Bench 项目使用教程

Rails Ruby Bench 项目使用教程 1. 项目介绍 Rails Ruby Bench(简称 RRB)是一个基于 Discourse 的基准测试工具,用于测量 Ruby 语言的性能。它是一个“真实世界”的基准测试,通过运行一个复杂的 Rails 应用程序来测量 Ruby 的性能。RRB 不仅适用于测量 Ruby 语言的性能,还可以用于测量其他相关技术的性能。 2. 项目快速启动 2.1 ...

gitblog_00819的博客 1090
上一篇: 在Windows平台使用Apache2.2和Mongrel运行Ruby on Rails
下一篇: Java程序员的推荐阅读书籍
robbin
博客等级 码龄26年 12粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值