Commit 2dcfb3a0d00aecf46d2fcb77bda57a86397054eb

Authored by Rodrigo Souto
1 parent 9ed7bab9

Log periodically memory consumption

(ActionItem3090)
config/initializers/log_memory_consumption.rb 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +if Delayed::Backend::ActiveRecord::Job.table_exists?
  2 + jobs = Delayed::Backend::ActiveRecord::Job.all :conditions => ['handler LIKE ?', "%LogMemoryConsumptionJob%"]
  3 + jobs.map(&:destroy) if jobs.present?
  4 + Delayed::Backend::ActiveRecord::Job.enqueue(LogMemoryConsumptionJob.new)
  5 +end
... ...
lib/log_memory_consumption_job.rb 0 → 100644
... ... @@ -0,0 +1,26 @@
  1 +class LogMemoryConsumptionJob < Struct.new(:last_stat)
  2 + # Number of entries do display
  3 + N = 20
  4 + # In seconds
  5 + PERIOD = 10
  6 +
  7 + def perform
  8 + logpath = File.join(Rails.root, 'log', "#{ENV['RAILS_ENV']}_memory_consumption.log")
  9 + logger = Logger.new(logpath)
  10 + stats = Hash.new(0)
  11 + ObjectSpace.each_object {|o| stats[o.class.to_s] += 1}
  12 + i = 1
  13 +
  14 + logger << "[#{Time.now.strftime('%F %T %z')}]\n"
  15 + stats.sort {|(k1,v1),(k2,v2)| v2 <=> v1}.each do |k,v|
  16 + logger << (sprintf "%-60s %10d", k, v)
  17 + logger << (sprintf " | delta %10d", (v - last_stat[k])) if last_stat && last_stat[k]
  18 + logger << "\n"
  19 + break if i > N
  20 + i += 1
  21 + end
  22 + logger << "\n"
  23 +
  24 + Delayed::Job.enqueue(LogMemoryConsumptionJob.new(stats), 0, PERIOD.seconds.from_now)
  25 + end
  26 +end
... ...