-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Collect success stories #62
Comments
from twitter: https://twitter.com/palkan_tula/status/955450943939776512
|
Just debugged a puppet run on a node that was very slow when parsing a catalog. With rbspy I could see which provider was so slow, and fix it. |
CocoaPods/CocoaPods#7348 (comment) -- sped up |
@jvns We used rbspy to find a silly bug where we were doing crazy array manipulations unnecessarily! jekyll/jekyll#6730 |
Not to derail this thread, but was the provider yours @baloo or one included with Puppet? |
json_schema is ~1/3 faster and the bottlenecks were mostly identified by rbspy. Thanks! |
We found pretty serious performance improvement in our ruby agent partly thanks to rbspy. Having a flamegraph generated on a repeating transaction allowed us to look into the application with a smaller resolution than the advertised 10ms. Some of these optims even concerned operation that individually take less than a millisecond but were happening much to often and it many places. Also the cheer ease of use of the tool (give it a pid, CTRL+C when done & you have your flamegraph) is completely awesome ! |
I do a lot of work on a rails app that's over 10 years old. The extensive test suite is highly parallelized, and took about 14m to run in CI. However, it was up to about 1hr 50m of CPU time across all cores. I used It revealed we had not properly configured the scrypt gem for the test environment. It was taking the default 200ms to encrypt the password every time a user was created. After proper configuration, the 10m worth of plummeted to under 3m. The CPU time for the entire suite dropped from by nearly an hour, which translated to about 3m shaved off every parallelized run. Thanks @jvns for the amazing tool! |
I've been using I'm not sure if flamegraphs are available in other tools, but the ease and accessibility of them in |
We over at Zammad had a massive performance issue in one of our customers installations. We made several optimizations by hand but never found the cause. Weeks passing by. Frustration was on a peak. The customer nearly lost the patience. However, I remembered about rbspy and decided to give it a try. Since it's production save it was easy as 1 2 3 to get it running and pointing to the exact line causing it. It was a deep recursion without proper handling for one certain Rails Model only. Less than 5 minutes of work to find it. My boss was (and still is) amazed. rbspy is now the number 1 tool in our toolbox for such cases. It helped us out multiple times since then. Thanks for your amazing work! |
We've used This is an amazing tool and we'll continue to use it here; thank you for making this possible! |
We have a very old Rails app that was taking over 10 seconds to load, and my boss heard about Bonus, I got to learn about profilers! |
BTW, if you are getting a "No stack counts found" error, you may just need to run |
Some things I used rbspy for:
I love how versatile rbspy is. I can both get a very high level summary of what's going on, but also if I need to I can easily figure out exactly which parts of the code are being slow. I guess to be fair, this is mostly thanks to flamegraphs. But it's really nice to have a tool that you can generate flamegraphs with so easily. Also, speaking of static analysis, we use this little snippet to run rbspy from within our ruby scripts. It's loaded automatically in production console environment: def rbspy(local_filepath)
Dir.mktmpdir do |tmpdir|
svg_file_path = File.join(tmpdir, "rbspy-#{SecureRandom.hex}")
cmd = "rbspy record --silent --format flamegraph --file #{svg_file_path} --pid #{Process.pid}"
pid = Kernel.spawn(cmd, :out => "/dev/null", :err => "/dev/null")
begin
yield
ensure
Process.kill(:INT, pid)
Process.waitpid2(pid)
save_file(local_filepath, File.binread(svg_file_path))
end
end
end You can wrap your slow code in a block and get nice flamegraphs: rbspy("slow-code.svg") do
slow_code()
end |
I've used rbspy to troubleshoot performance issues in a big, old, hairy Rails app. |
I've used it after running |
I've described the whole story in a blog post. |
Used |
I'd like stories from people who are using rbspy. Have you used rbspy successfully to fix a performance problem? What kind of performance problem? How did rbspy help?
This helps with developing rbspy -- if we can see how people are using it, it's easier to figure out what other features might be useful to add!
comment on this issue if you have a story to share!
The text was updated successfully, but these errors were encountered: