ryeguy
ryeguy

Reputation: 66851

How can I profile a request in Ruby on Rails?

How can I profile a controller action?

One of my views is taking quite some time to render, and I'd like to break it down. I see script/performance/profiler, but that seems to only have access to the global scope.

Upvotes: 11

Views: 3830

Answers (3)

Taryn East
Taryn East

Reputation: 27747

ruby-prof is the way to go. Here's a howto, How to profile your Rails and Ruby applications with ruby-prof.

If you use it in combination with a visualisation tool such as kcachegrind, you can easily separate the code that is your application code from the framework code.

I gave a talk on these tools at my local Ruby-users group a while back: Making your rails app kick ass with ruby-prof and kcachegrind.

Upvotes: 8

Mike Jarema
Mike Jarema

Reputation: 1187

I've had some success with https://github.com/bhb/rack-perftools_profiler

It'll let you profile a single or multiple requests for any of cputime, methods, object allocations or walltime, and integrate nicely via Rack middleware.

Upvotes: 0

jonnii
jonnii

Reputation: 28312

The Ruby on Rails console should show you which partials are taking a while to render. If that's not enough, you could install the new relic gem (https://github.com/newrelic/rpm) and use that in developer mode which will give you an overview of what's going on.

If you're deploying on Heroku you can add the free version of rpm which will give you the same statistics on your running application.

Ruby has a profiler (http://ruby-prof.rubyforge.org/) which will show you memory usage, call times, etc., but it might be hard to disseminate your code from the framework code.

Upvotes: 2

Related Questions