mirror of
https://github.com/discourse/discourse.git
synced 2024-11-23 01:47:22 +08:00
diff heaps used for memory leak detection
This commit is contained in:
parent
49efb055f2
commit
5777423b05
40
script/diff_heaps.rb
Normal file
40
script/diff_heaps.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
# to be used to compare ruby heaps generated in 2.1
|
||||
# can isolate memory leaks
|
||||
#
|
||||
# rbtrace -p 15193 -e 'Thread.new{require "objspace"; ObjectSpace.trace_object_allocations_start; GC.start(full_mark: true); ObjectSpace.dump_all(output: File.open("heap.json","w"))}.join'
|
||||
#
|
||||
#
|
||||
require 'set'
|
||||
require 'json'
|
||||
|
||||
if ARGV.length != 2
|
||||
puts "Usage: diff_heaps [ORIG.json] [AFTER.json]"
|
||||
exit 1
|
||||
end
|
||||
|
||||
origs = Set.new
|
||||
|
||||
File.open(ARGV[0], "r").each_line do |line|
|
||||
parsed = JSON.parse(line)
|
||||
origs << parsed["address"] if parsed && parsed["address"]
|
||||
end
|
||||
|
||||
diff = []
|
||||
|
||||
File.open(ARGV[1], "r").each_line do |line|
|
||||
parsed = JSON.parse(line)
|
||||
if parsed && parsed["address"]
|
||||
diff << parsed unless origs.include? parsed["address"]
|
||||
end
|
||||
end
|
||||
|
||||
diff.group_by do |x|
|
||||
[x["type"], x["file"], x["line"]]
|
||||
end.map {|x,y|
|
||||
[x, y.count]
|
||||
}.sort{ |a,b|
|
||||
b[1] <=> a[1]
|
||||
}.each{ |x,y|
|
||||
puts "Leaked #{y} #{x[0]} objects at: #{x[1]}:#{x[2]}"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user