cartodb/config/initializers/memory_profiling.rb

44 lines
1.1 KiB
Ruby
Raw Permalink Normal View History

2020-06-15 10:58:47 +08:00
# See http://www.be9.io/2015/09/21/memory-leak/
# This enables memory logging in order to check memory consumption (reproducing memory leaks)
if ENV['MEMORY_REPORTING']
Thread.new do
while true
pid = Process.pid
rss = `ps -eo pid,rss | grep #{pid} | awk '{print $2}'`.to_i
Rails.logger.info "MEMORY[#{pid}]: rss: #{rss}, live objects #{GC.stat[:heap_live_slots]}"
sleep 5
end
end
require 'rack/gc_tracer'
Rails.configuration.middleware.use Rack::GCTracerMiddleware, view_page_path: '/gc_tracer', filename: 'log/gc.log'
require 'objspace'
ObjectSpace.trace_object_allocations_start
require 'rbtrace'
require 'memory_profiler'
end
module CartoDB
def self.memory_dump(filename)
require 'objspace'
# Dump classes (id -> name)
cls = ObjectSpace.each_object.inject(Hash.new(0)) do |h, o|
h[o.class.object_id] = o.class.name rescue 'ERR'
h
end
File.open(filename + '.classes', 'w') do |f|
JSON.dump(cls, f)
end
GC.start
# Dump objects
File.open(filename + '.dump', 'w') do |f|
ObjectSpace.dump_all(output: f)
end
end
end