BleakHouse 4 came to life this weekend.
BleakHouse now tracks the spawn points of every object on the heap, somewhat like Valgrind and somewhat like Dike.
This means there is no framing necessary, and the analysis task runs in seconds instead of hours. On the other hand, the pure-C instrumentation means it’s fast enough to run in production, won’t introduce new leaks in your app, and can track
T_NODE and other Ruby internals.
After exactly 2000 requests:
$ bleak /tmp/bleak.13795.0.dump 1334329 total objects Final heap size 1334329 filled, 1132647 free Displaying top 100 most common line/class pairs 408149 __null__:__null__:__node__ 273858 (eval):3:String 135304 __null__:__null__:String 29998 /opt/local/lib/ruby/gems/1.8/gems/mongrel-1.1.4/lib/mongrel.rb:122:String 14000 /rails/activesupport/lib/active_support/core_ext/hash/keys.rb:8:String 11825 /rails/actionpack/lib/action_controller/base.rb:1215:String 7022 /opt/local/lib/ruby/site_ruby/1.8/rubygems/specification.rb:557:Array 5995 /rails/actionpack/lib/action_controller/session/cookie_store.rb:145:String 4524 /opt/local/lib/ruby/gems/1.8/specifications/gettext-1.90.0.gemspec:14:String 4000 /opt/local/lib/ruby/1.8/cgi/session.rb:299:Array 4000 /rails/actionpack/lib/action_controller/response.rb:10:Array ...
Somebody’s got an
eval leak, for sure. And those
session.rb counts are pretty suspicious.
The BleakHouse docs are here. The codebase is very solid and I look forward to adding some neat things in 4.1 and 4.2.
credit where it’s due
Part of the development of BleakHouse 4 was sponsored by a Rails company you have definitely heard of.