如何根据内存使用情况分析Erlang程序?

cdl*_*dlf 20 erlang profiling

我想进一步提高现有Erlang程序的效率.首先,我想确定瓶颈,然后决定进一步优化的位置.

我试过了fprof,但它只提供有关总运行时间和平均运行时间的信息.我最希望看到一个类似于fprof输出的日志,但是关于函数和进程的平均和总内存使用情况.


对于初学者来说,分析单个模块就足够了,它不会产生进程,只会调用它的函数.这已经有所帮助,因为我可以将程序分离到不同的模块进行测试.


典型的可疑点是,正在处理更大的列表.

这里的用法++已经通过lists:reverse([Head|Tail])类似的语法解决了.

我也在考虑使用ETS表而不是列表来处理超过几百个元素的情况.

先感谢您!

Ama*_*iro 20

做一些广告为了我自己:我写了一个小二郎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

希望这可以帮助你:)