discourse/script/biggest_objects.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

43 lines
1.1 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
# simple script to measure largest objects in memory post boot
exec "RAILS_ENV=production ruby #{__FILE__}" if ENV["RAILS_ENV"] != "production"
require "objspace"
ObjectSpace.trace_object_allocations do
require File.expand_path("../../config/environment", __FILE__)
begin
Rails.application.routes.recognize_path("abc")
rescue StandardError
nil
end
# load up the yaml for the localization bits, in master process
I18n.t(:posts)
RailsMultisite::ConnectionManagement.each_connection do
(ActiveRecord::Base.connection.tables - %w[schema_migrations versions]).each do |table|
begin
table.classify.constantize.first
rescue StandardError
nil
end
end
end
end
5.times { GC.start(full_mark: true, immediate_sweep: true) }
[String, Array, Hash].each do |klass|
ObjectSpace
.each_object(klass)
.sort { |a, b| b.length <=> a.length }
.first(50)
.each do |obj|
puts "#{klass} size: #{obj.length} #{ObjectSpace.allocation_sourcefile(obj)} #{ObjectSpace.allocation_sourceline(obj)}"
end
end