我目前正在调查大型Erlang应用程序中的性能问题。该应用程序的CPU负载大于预期。为了首先掌握系统的哪些部分负责负载,我想按照this answer中的描述执行callstack采样。
有没有比重复调用erlang:process_info(Pid, backtrace)
并从该输出中获取函数更好的方法呢?
请注意,系统太大而无法使用fprof
,并且etop
也未指向正确的方向。目前还不能仅将fprof
用于系统的某些部分,因为我首先需要指出性能问题的一般位置。
答案 0 :(得分:1)
获取堆栈实际大小的简单方法是ax.legend([0.5]+[['0.0%', '100.0%'], ['10.0%', '90.0%'], ['30.0%', '70.0%']])
。虽然这只能用单词返回堆栈的大小,但它是一种非常简单有效的方法,可以查看哪些进程有大量堆栈。