Самый простой способ найти, какие типы данных больше всего собирают мусор? - PullRequest
7 голосов
/ 23 марта 2011

Я немного осмотрел объяснения профилирования, но не вижу способа выяснить, какие типы данных чаще всего собирают мусор. Есть ли способ сделать это?

Часть нашего кода выполняется на 50% или даже 80% в сборщике мусора, поэтому ... пытаемся отследить, какие типы данных обрабатываются.

1 Ответ

3 голосов
/ 23 марта 2011

Для профилирования вы можете добавить в приложение довольно много опций при его запуске.Сначала вы можете добавить "+ RTS -sstderr".Это дает вам обширную статистику, которую вы описали, так что я думаю, вы уже знаете это!

1,835,837,744 bytes allocated in the heap
328,944,448 bytes copied during GC
2,908,728 bytes maximum residency (25 sample(s))
142,056 bytes maximum slop
9 MB total memory in use (1 MB lost due to fragmentation)

Generation 0: 3483 collections, 0 parallel, 1.54s, 1.54s elapsed
Generation 1: 25 collections, 0 parallel, 0.09s, 0.07s elapsed

INIT time 0.00s ( 0.00s elapsed)
MUT time 3.04s ( 3.13s elapsed)
GC time 1.63s ( 1.61s elapsed)
RP time 0.00s ( 0.00s elapsed)
PROF time 0.00s ( 0.00s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 4.67s ( 4.74s elapsed)
%GC time 34.9% (34.0% elapsed)
Alloc rate 603,893,994 bytes per MUT second
Productivity 65.1% of total user, 64.2% of total elapsed

Как вы можете видеть из приведенного выше примера, я пишу довольно плохой Haskell.Вы можете углубиться в это больше с помощью некоторых дополнительных опций и улучшать вещи.

  1. -prof - Включает профилирование
  2. -caf-all - Константа Аппликативная форма для всех элементов верхнего уровня (константазатраты, по одному на каждый модуль.)
  3. -auto-all - анализ МВЗ для каждой функции верхнего уровня

Как только вы получите информацию профилирования, вы можете распечататькрасивые картинки, как показано ниже ( hp2ps ).Это показывает ставки распределения.Как вы можете видеть ниже, довольно просто найти функцию, которая выполняет слишком много работы.

Picture of the allocation rate of various functions

Хотя это не дает информации для каждого типа, это помогает изолировать то, что происходит.Я нашел Real World Haskell чрезвычайно полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...