DEV Community

Cover image for Profile arbitrary code in prod console
Augusts Bautra
Augusts Bautra

Posted on • Edited on

2 1

Profile arbitrary code in prod console

Include stackprof in gemfile

gem "stackprof", ">= 0.2.26", require: false
Enter fullscreen mode Exit fullscreen mode

Require stackprof and run slow code in its block

require "stackprof"

def profile!
  profile =
    StackProf.run(ignore_gc: true, interval: 1000, mode: :wall, raw: true) do
      @value = # slow code
    end

  output_file = Rails.root.join("log/stackprof.json")  
  File.write(output_file, JSON.generate(profile))

  @value # return the original  
end

profile!
Enter fullscreen mode Exit fullscreen mode

DL the file to local computer

scp PROD:/path/to/log/stackprof.json ~/Desktop/profile.json
Enter fullscreen mode Exit fullscreen mode

Upload the file to https://www.speedscope.app and study flamegraph

Addendum

You can simplify accessing the file somewhat by writing it into Rails' public/ directory to have access it via the web-server.

For example

output_file = Rails.root.join("public/stackprof.json")
Enter fullscreen mode Exit fullscreen mode

Will be accessible at https://<your.site>/stackprof.json. Be mindful of security risks.

Image of Datadog

Create and maintain end-to-end frontend tests

Learn best practices on creating frontend tests, testing on-premise apps, integrating tests into your CI/CD pipeline, and using Datadog’s testing tunnel.

Download The Guide

Top comments (0)

AWS Security LIVE!

Tune in for AWS Security LIVE!

Join AWS Security LIVE! for expert insights and actionable tips to protect your organization and keep security teams prepared.

Learn More