首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Erlang/OTP -定时应用程序

Erlang/OTP -定时应用程序
EN

Stack Overflow用户
提问于 2010-12-01 22:41:47
回答 4查看 4.3K关注 0票数 14

我感兴趣的板凳-标记我的程序的不同部分的速度。我试过使用info(statistics)erlang:now()

我需要知道平均速度是多少微秒。我不知道为什么我写的剧本有问题。

它应该可以在任何地方开始,在任何地方结束。当我尝试在可能并行运行四次的进程上启动它时,我遇到了一个问题。

有没有人已经找到了解决这个问题的办法?

编辑:

如果有人能提供剧本来做的话,愿意给予赏金。它需要通过多个进程产生‘。我不能接受像计时器这样的功能。至少在我看到的实现中。它只遍历一个进程,即使这样,对完整程序的全面测试也需要一些重要的编辑。希望我说得够清楚了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-04 15:19:19

下面是如何使用eprof,可能是您最简单的解决方案:

首先,您需要启动它,就像大多数应用程序一样:

代码语言:javascript
运行
复制
23> eprof:start().
{ok,<0.95.0>}

Eprof支持两种分析模式。您可以调用它并要求配置特定的函数,但是我们不能使用它,因为其他进程会把所有的事情都搞砸。我们需要手动启动它,并告诉它何时停止(顺便说一句,这就是为什么您不会有一个简单的脚本)。

代码语言:javascript
运行
复制
24> eprof:start_profiling([self()]).
profiling

这告诉eprof对将从shell中运行和生成的所有内容进行分析。这里将包括新的程序。我将运行一些我拥有的任意多处理函数,它产生大约4个进程相互通信几秒钟:

代码语言:javascript
运行
复制
25> trade_calls:main_ab().
Spawned Carl: <0.99.0>
Spawned Jim: <0.101.0>
<0.100.0>
Jim: asking user <0.99.0> for a trade
Carl: <0.101.0> asked for a trade negotiation
Carl: accepting negotiation
Jim: starting negotiation
... <snip> ...

现在,我们可以告诉eprof在函数运行后停止分析。

代码语言:javascript
运行
复制
26> eprof:stop_profiling().
profiling_stopped

我们要原木。默认情况下,Eprof会将它们打印到屏幕上。您可以要求它也用eprof:log(File)登录到一个文件。然后你可以告诉它来分析结果。我们告诉它将运行时从所有进程折叠到一个带有选项total的表中(更多选项请参见手册 ):

代码语言:javascript
运行
复制
27> eprof:analyze(total).           
FUNCTION                                  CALLS      %  TIME  [uS / CALLS]
--------                                  -----    ---  ----  [----------]
io:o_request/3                               46   0.00     0  [      0.00]
io:columns/0                                  2   0.00     0  [      0.00]
io:columns/1                                  2   0.00     0  [      0.00]
io:format/1                                   4   0.00     0  [      0.00]
io:format/2                                  46   0.00     0  [      0.00]
io:request/2                                 48   0.00     0  [      0.00]
...
erlang:atom_to_list/1                         5   0.00     0  [      0.00]
io:format/3                                  46  16.67  1000  [     21.74]
erl_eval:bindings/1                           4  16.67  1000  [    250.00]
dict:store_bkt_val/3                        400  16.67  1000  [      2.50]
dict:store/3                                114  50.00  3000  [     26.32]

您可以看到,大部分时间(50%)用于dict:store/3.16.67%用于输出结果,另16.67%由erl_eval获取(这就是在shell中运行短函数的原因--解析它们比运行它们的时间长)。

然后你就可以从那里开始了。这是分析Erlang运行时的基础。小心处理,eprof对于生产系统或运行时间太长的功能来说可能是一个相当大的负载。尤其是在生产系统上。

票数 41
EN

Stack Overflow用户

发布于 2010-12-01 23:20:44

您可以使用eprof或fprof

票数 5
EN

Stack Overflow用户

发布于 2010-12-01 22:50:25

正常的方法是使用计时器:tc。这里是一个很好的解释。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4329893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档