Skip to content

Instantly share code, notes, and snippets.

@jmkoni jmkoni/measure.rb
Created May 26, 2015

Embed
What would you like to do?
Benchmark script from Ruby Performance Optimization (https://pragprog.com/book/adrpo/ruby-performance-optimization)
require "json"
require "benchmark"
class Measure
def self.run(&block)
no_gc = (ARGV[0] == "--no-gc")
if no_gc
GC.disable
else
# collect memory allocated during library loading # and our own code before the measurement
GC.start
end
memory_before = `ps -o rss= -p #{Process.pid}`.to_i/1024
gc_stat_before = GC.stat
time = Benchmark.realtime do
yield
end
gc_stat_after = GC.stat
GC.start unless no_gc
memory_after = `ps -o rss= -p #{Process.pid}`.to_i/1024
puts({
RUBY_VERSION => {
gc: no_gc ? 'disabled' : 'enabled',
time: time.round(2),
gc_count: gc_stat_after[:count] - gc_stat_before[:count],
memory: "%dM" % (memory_after - memory_before)
}
}.to_json)
end
end
@jmkoni

This comment has been minimized.

Copy link
Owner Author

jmkoni commented Dec 9, 2015

Call it like this:

Measure.run do
  #whatever code you want to test
end

The output will look like this:

{"2.2.2":{"gc":"enabled","time":0.04,"gc_count":0,"memory":"0M"}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.