DEV Community

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

Posted on Edited on

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.

Top comments (0)