78: def ObjectTracker.sample
79: ospace = Set.new
80: counts = {}
81:
82: ObjectSpace.each_object do |obj|
83: begin
84: ospace << obj.object_id
85: counts[obj.class] ||= 0
86: counts[obj.class] += 1
87: rescue Object
88:
89: end
90: end
91:
92: dead_objects = @active_objects - ospace
93: new_objects = ospace - @active_objects
94: live_objects = ospace & @active_objects
95:
96: MongrelDbg::trace(:objects, "COUNTS: #{dead_objects.length},#{new_objects.length},#{live_objects.length}")
97:
98: if MongrelDbg::tracing? :objects
99: top_20 = counts.sort{|a,b| b[1] <=> a[1]}[0..20]
100: MongrelDbg::trace(:objects,"TOP 20: #{top_20.inspect}")
101: end
102:
103: @active_objects = live_objects + new_objects
104:
105: [@active_objects, top_20]
106: end