Я тоже на работе программу оборудовал (неотключаемым!!!) профилировщиком. Делая проход по всем объектам (отнаследованным от определённого класса) вычисляю их текущее количество. Измеряется скорость их создания и убиения текущая (за последние N-минут) и средняя-глобальная. По объектам сообщений замеряется какой тип сообщения к какому типу объектов был отправлен, сколько раз, время затраченное на обработку сообщения (с дисперсией), тоже текущее и средне-глобальное. Для логгера, если он активен, считается сколько сообщений и какого размера записывается в лог, с какой скоростью и т.п. Встроил паузомер сборщика мусора, он измеряет как часто запускается сборка мусора, средняя и максимальная продолжительность паузы текущая и средне-глобальная, сколько памяти зажрано. Для соединений с СУБД: как часто, в какие таблицы, какие запросы и т.п. Ну и ещё много чего другого... Вся эта информация (по умолчанию раз в минуту) сбрасывается на диск в текстовый файл. Помогает.