Identify what your Ruby process is doing
Quick diagnostics of production issues become a lot easier with a direct way to inspect the running process. Ever wondered exactly what the program is doing right now, without adding a lot of slow logging? With this gem in place, you can get full stacktraces for all threads in the system, while the process keeps running, in production. This means you can do this a few of these dumps, and then look for recurring patterns to identify the currently largest bottlenecks. It’s much easier to fix a problem when you know exactly where to look.
Soon you’ll be back on the road to awesome
Simply install and load the xray
gem, then add this to your Gemfile
(or similar):
Next, you need to start the ruby-process, and find the PID (process identifier):
You can now invoke:
where 1234
is the PID of the ruby process. Note this does not terminate the process. Instead, you immediately see a full stacktrace for current thread written to standard out of the process. If you’re using the Ruby Enterprise Edition runtime, you will get a stacktrace for all threads, a big win. If you are running the process interactively, you see the output directly in the terminal. For service-processes in production, you will need to check the appropriate logfile.
Thread dumps for Phusion Passenger with RVM
You can see all running Phusion Passenger instances, including their individual PIDs with this:
Then move in for the kill -3
, and have a look at standard out for Passenger. By default on OS X 10.6, this ends up in the file /private/var/log/apache2/error_log
, so have a look there. Notice the use of rvmsudo
instead of regular sudo
- this is because I’m using RVM to manage my ruby-versions.
I hope you found this useful – what is your stacktrace-aided war-story?
Hi, I'm Laust Rud Jacobsen, an experienced webapp developer specializing in Elixir, Ruby and PostgreSQL-based solutions. You can hire me to build awesome stuff for you. If you have any questions or comments, reach out at @laustrud or privately at work@valuestream.io.