Rails 3.2 性能优化记录
将一个项目从rails2.3+ruby1.8升级到rails3.2+ruby1.9 之后,性能测试发现原先平均500ms的请求,变成了750ms,性能损失达到了50%,经过一些性能优化以后,改善到了400ms左右,记录一下优化的3个地方。
1. GC调整
根据一些资料,Rails3.2的call stack比2.3深了N多层,导致GC会变得更加频繁,所以首先针对GC做profile,对比升级前后的数据:
Rack::Cache 整页缓存Rack::Runtime 记录X-Runtime(方便客户端查看执行时间)ActionDispatch::RequestId 记录X-Request-Id(方便客户端查看请求具体在集群中的哪台执行)ActionDispatch::RemoteIp防止IP伪造(可以在web server上做)ActionDispatch::Callbacks设置callbackRack::ConditionalGet设置If-None-Match and If-Modified-SinceRack::ETag设置ETagActionDispatch::BestStandardsSupport设置X-UA-Compatiblecd(可以在web server上做)
写一个initializer,去除掉这些不必要的中间件。
整个优化的重点就是减少GC,希望Rails 4能够更加精简,希望Ruby 2.0的GC能够有更好的性能。