Have a running Ruby program that you want to profile without restarting it? Want to profile a Ruby
command line program really easily? You want
rbspy! rbspy can profile any Ruby program just by
running 1 simple command.
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
rbspy lets you record profiling data, save the raw profiling data to disk, and then analyze it in
a variety of different ways later on.
only wall-clock profiling
There are 2 main ways to profile code -- you can either profile everything the application does (including waiting), or only profile when the application is using the CPU.
rbspy profiles everything the program does (including waiting) -- there's no option to just profile when the program is using the CPU.
rbspy supports Linux*, Mac, and Windows.* kernel version 3.2+ required. For Ubuntu, this means Ubuntu 12.04 or newer.
Add a testimonial
Did rbspy help you make your program faster? An awesome way to thank the project is to add a success story to this GitHub issue where people talk about ways rbspy has helped them! Hearing that rbspy is working for people is good motivation :)
On Mac, you can install with Homebrew:
brew install rbspy.
- Download recent release of
rbspyfrom the GitHub releases page
- Unpack it
- Move the
Or have a look at Installing rbspy on our documentation.
Pull requests that improve usability, fix bugs, or help rbspy support more operating systems are very welcome. If you have a question, the best way to ask is to create a GitHub issue!
If you're not a very experienced Rust programmer, you're very welcome to contribute. A major reason rbspy is written in Rust is that Rust is more approachable for beginners than C/C++. https://www.rust-lang.org/ has great resources for learning Rust.
- Install cargo from crates.io
cargo buildto build
cargo testto test
The built binary will end up at
Tagging a release
Here are the steps for maintainers to tag a new release:
Cargo.tomlwith the new version, run
cargo buildto ensure
- If you have updated the ruby-structs bindings, update the version number in
ruby-structs/Cargo.tomlso that it matches the new rbspy version.
- Open a PR for the version bump. You can generate a CHANGELOG via
git log --pretty='- %s' v0.3.10...HEAD.
- After the PR is merged, tag the new release, e.g.
git tag v0.3.11, and push it:
git push --tags.
- Travis will publish the tarballs to GitHub.