2
我试图用eprof剖析一个Erlang应用程序。结果表明,大部分时间都花在字典模块中虽然我最感兴趣的分析模块不直接使用字典,它的依赖做到这看起来有点像这样:EProf Erlang剖析
A-- B - dict
|- C - dict
A是正在运行的进程(一个gen_server)并使用模块B和C都使用字典。我怎样才能知道哪个模块最多使用字典?
我试图用eprof剖析一个Erlang应用程序。结果表明,大部分时间都花在字典模块中虽然我最感兴趣的分析模块不直接使用字典,它的依赖做到这看起来有点像这样:EProf Erlang剖析
A-- B - dict
|- C - dict
A是正在运行的进程(一个gen_server)并使用模块B和C都使用字典。我怎样才能知道哪个模块最多使用字典?
为了解决类似的问题,我创建了从dbg trace格式到callgrind格式的转换器。它帮助我使用kcachegrind作为具有时间成本信息的函数调用层次结构的可视化器。
这里是视图帮助寻找在那里的时间都花在 https://raw.github.com/virtan/eep/master/doc/sshot6.png
你可以尝试调整两个模块,而不是使用orddict的一个例子吗?如果你尝试每种方式(B/dict + C/orddict,然后B/orddict + C/dict),你可能有足够的信息来回答这个问题。 – macintux
有趣的方法,但我设法解决这个问题,而不使用fprof来更改代码,它显示了函数(包括调用)和其他有用的东西(如gc和进程暂停)所花费的总时间。如果任何人有任何其他要添加的问题,请保留此问题。 –
你可以尝试使用[this escript](https://github.com/isacssouza/erlgrind)我写到将fprof输出转换为callgrind输出,并用kcachegrind或类似的东西将其可视化。 – Isac