Published 2022-05-03.
Time to read: 1 minutes.
jekyll
collection.
Have you ever wanted to know what functions your Ruby program is calling?
rbspy
can tell you!
rbspy
lets you profile Ruby processes that are already running.
You give it a PID, and it starts profiling!
It’s a sampling profiler, which means it's low overhead and safe to run in production.
Installing
I downloaded rbspy-x86_64-musl.tar.gz
.
The musl
build is statically linked and should be compatible with most Linux systems.
More details here.
$ wget -O ~/Downloads/rbspy.tar.gz https://github.com/rbspy/rbspy/releases/download/v0.12.1/rbspy-x86_64-musl.tar.gz --2022-05-03 07:58:33-- https://github.com/rbspy/rbspy/releases/download/v0.12.1/rbspy-x86_64-musl.tar.gz Resolving github.com (github.com)... 140.82.112.4 Connecting to github.com (github.com)|140.82.112.4|:443... connected. HTTP request sent, awaiting response... 302 Found Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/58655757/f10942b5-592b-4ed6-8a62-d76776c4fdb3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220503%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220503T115837Z&X-Amz-Expires=300&X-Amz-Signature=7e70c4443ddd4053d887244deaa01ac8c2033dbc06b9bdf9d4389580bebfa179&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=58655757&response-content-disposition=attachment%3B%20filename%3Drbspy-x86_64-musl.tar.gz&response-content-type=application%2Foctet-stream [following] --2022-05-03 07:58:33-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/58655757/f10942b5-592b-4ed6-8a62-d76776c4fdb3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220503%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220503T115837Z&X-Amz-Expires=300&X-Amz-Signature=7e70c4443ddd4053d887244deaa01ac8c2033dbc06b9bdf9d4389580bebfa179&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=58655757&response-content-disposition=attachment%3B%20filename%3Drbspy-x86_64-musl.tar.gz&response-content-type=application%2Foctet-stream Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.110.133, ... Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.109.133|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 2610927 (2.5M) [application/octet-stream] Saving to: ‘/home/mslinn/Downloads/rbspy.tar.gz’ /home/mslinn/Downloads/rbspy.tar.gz 100%[===========================================================================================>] 2.49M --.-KB/s in 0.04s 2022-05-03 07:58:34 (57.7 MB/s) - ‘/home/mslinn/Downloads/rbspy.tar.gz’ saved [2610927/2610927]
The recommended directory for user scripts on Ubuntu is ~/.local/bin/
.
This directory does not exist by default.
More information here.
$ cd ~/.local/bin/ $ tar -xvf ~/Downloads/rbspy.tar.gz rbspy-x86_64-musl $ mv ./rbspy-x86_64-musl rbspy $ chmod a+x rbspy
Now we can learn how to use rbspy:
$ rbspy --help
Sampling profiler for Ruby programs
USAGE:
rbspy <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
-V, --version Print version information
SUBCOMMANDS:
help Print this message or the help of the given subcommand(s)
record Continuously capture traces from a Ruby process
report Generate visualization from raw data recorded by `rbspy record`
snapshot Capture a single stack trace from a running Ruby program