#java #garbage-collection
#java #сборка мусора
Вопрос:
Я ищу инструмент, который может обеспечить профилирование живых объектов, подобное VisuaVM, но в режиме, отличном от GUI.
Доступ к функциям виртуальной машины Visual, о которых я говорю, осуществляется путем перехода на вкладку «Профилировщик» и нажатия кнопки «Память».
Установив предустановку профиля «Выделение объектов профиля и GC» для всех объектов ever 1 (все объекты). Это дает мне именно то, что мне нужно в автоматически обновляющемся представлении, которое я могу отфильтровать для интересующего меня класса.
Однако я хочу иметь возможность экспортировать таблицу «живых объектов» в текстовый файл для каждого снимка, который делается (Visual VM обновляется каждые одну секунду). Очевидно, что указание и щелчок никак не могут быть решением…
Кто-нибудь знает о таком профилировщике «командной строки»?
Я смотрел на jmap, который предоставляет дампы кучи, но это слишком дорого (дамп занимает слишком много времени, меня интересует только количество объектов).
Существует коммерческий инструмент под названием YourKit, но я не знаю, может ли он делать то, что мне нужно (а также кажется довольно дорогим для типа «одноразового» использования, для которого он мне нужен).
Если бы я мог использовать VisualVM как есть, но при этом добавлять выходные данные в файл (вместо обновления графического интерфейса пользователя), это было бы идеально…
Ответ №1:
Я думаю, что гистограммы классов — это то, что вы ищете. Вы могли бы собирать гистограммы через регулярные промежутки времени, и это покажет вам количество объектов каждого класса и занимаемое пространство. Затем вы можете самостоятельно проанализировать выводимый текст, чтобы:
- сравните две гистограммы, чтобы увидеть распределение / освобождение экземпляра
- фильтр по имени класса
- отслеживание заполнения пространства экземплярами класса с течением времени
Соберите гистограмму класса с jmap -histo $pid.