Как представить программу Erlang с точки зрения использования памяти?

Я хотел бы далее улучшить эффективность существующей программы Erlang. Сначала я хотел бы определить узкие места и затем выбрать, где далее оптимизировать.

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


Для начинающих было бы достаточно представить единственный модуль, который не порождает процессы, только это - функции, был бы назван. Это уже помогло бы, поскольку я мог разделить программу к отличным модулям для тестирования.


Типичные подозрительные точки, где большие списки обрабатываются.

Здесь использование ++ был разрешен lists:reverse([Head|Tail]) как синтаксис.

Я также рассматриваю использование таблиц ETS вместо Списков для случаев больше чем с несколькими сотнями элементов.

Заранее спасибо!

20
задан cdlf 12 May 2010 в 23:21
поделиться

2 ответа

Рекламирую ради себя: недавно я написал небольшой сервер erlang gen_server, который записывает и регистрирует системную статистику, в сочетании с небольшим скриптом Perl, который анализирует их и выводит красивые диаграммы.

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

Часть erlang довольно ненавязчива, это простой gen_server, который вы можете запустить откуда угодно, вы можете просто поместить его под свое дерево надзора. Вы можете настроить частоту опроса и т. Д., И он будет записывать статистику в файл в простом формате json.

Perl-скрипт затем запускает его и объединяет журналы для построения диаграмм. Существуют базовые классы, и если вы немного знакомы с Perl, вы можете легко написать класс для регистрации и построения диаграмм для любого настраиваемого параметра, который вам нужен.

Скрипт можно получить по адресу: https://github.com/Amadiro/erlang-statistics

Образец диаграммы (узел Erlang, улавливающий атомы): Образец диаграммы http: // monoc. mo.funpic.de/ram-usage-vs-time.png

Надеюсь, это вам поможет :)

20
ответ дан 30 November 2019 в 00:35
поделиться

Идеальная отправная точка - это Раздел профилирования из руководства по эффективности Erlang:

http://www.erlang.org/doc/efficiency_guide/profiling.html

4
ответ дан 30 November 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: