Я хотел бы далее улучшить эффективность существующей программы Erlang. Сначала я хотел бы определить узкие места и затем выбрать, где далее оптимизировать.
Я попробовал fprof
, но это только дает информацию об общем и среднем времени выполнения. Я больше всего хотел бы видеть журнал, подобный выводу fprof, но с точки зрения использования средней и общей памяти относительно функций и процессов.
Для начинающих было бы достаточно представить единственный модуль, который не порождает процессы, только это - функции, был бы назван. Это уже помогло бы, поскольку я мог разделить программу к отличным модулям для тестирования.
Типичные подозрительные точки, где большие списки обрабатываются.
Здесь использование ++
был разрешен lists:reverse([Head|Tail])
как синтаксис.
Я также рассматриваю использование таблиц ETS вместо Списков для случаев больше чем с несколькими сотнями элементов.
Заранее спасибо!
Рекламирую ради себя: недавно я написал небольшой сервер 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
Надеюсь, это вам поможет :)
Идеальная отправная точка - это Раздел профилирования из руководства по эффективности Erlang: