cprof
cprof
模块
cprof
模块摘要
一个简单的呼叫计数分析工具,使用断点来实现最小的运行时性能影响。
描述
cprof
模块用于分析程序,以了解调用不同功能的次数。与本地调用跟踪相似但包含计数器的断点用于最大程度地减少运行时性能影响。
由于使用了断点,因此不需要对要分析的任何模块进行特殊编译。目前,这些断点只能在BEAM代码上设置,因此BIF不能跟踪呼叫计数。
呼叫计数器的大小是主机字大小。暂停计数器时使用一位,因此32位主机的最大计数器值为2147483647。
性能分析结果作为包含条目的排序列表的术语提供,每个模块一个。每个模块条目都包含一个排序的功能列表。在这两种情况下的排序顺序都是减少呼叫计数。
与其他形式的跟踪相比,呼叫计数跟踪非常轻便,因为不需要生成跟踪消息。一些测量表明在10%附近的性能下降。
出口
analyse() -> {AllCallCount, ModAnalysisList}analyse(Limit) -> {AllCallCount, ModAnalysisList}analyse(Mod) -> ModAnalysisanalyse(Mod, Limit) -> ModAnalysis
类型
收集并分析节点中当前处于任一模块Mod
或所有模块(除cprof
本身之外)的调用计数器,并返回:
FuncAnalysisList
元组的列表,模块中的每个函数都有一个元组,按降序FuncCallCount
排列。模块中所有功能ModCallCount
的FuncCallCount
值的总和Mod
。所有相关模块AllCallCount
的ModCallCount
值的总和ModAnalysisList
。ModAnalysisList
元组列表,每个模块除外cprof
,按降序ModCallCount
排列。
如果调用计数器在执行时仍在运行analyse/0..2
,您可能会得到不一致的结果。如果进程执行analyse/0..2
被调度出来,则会发生这种情况,所以其他进程可以递增正在分析的计数器,在分析pause()
之前调用会处理该问题。
如果Mod
给出参数,则结果仅包含ModAnalysis
模块的元组Mod
,否则结果包含ModAnalysis
从code:all_loaded()
除cprof
本身之外返回的所有模块的一个元组。
FuncCallCount
低于的所有函数Limit
都将被排除在外FuncAnalysisList
。ModCallCount
尽管如此,它们仍然包含在内。Limit
is 的默认值1
。
pause() -> integer()
暂停所有模块中所有功能的调用计数跟踪,并停止它加载模块中的所有功能。这与之相同(pause{'_','_','_'})+stop{on_load}))。
另见pause/1..3
下文。
pause(FuncSpec) -> integer()pause(Mod, Func) -> integer()pause(Mod, Func, Arity) -> integer()
类型
暂停呼叫计数器以匹配模块中的匹配功能。该FS
参数可以用来指定第一个参数erlang:trace_pattern/3
。见erlang(3)。
具有呼叫计数断点的所有匹配功能的呼叫计数器将暂停在其当前计数。
返回可能具有调用计数断点的匹配函数的数量,与返回start/0..3
相同参数相同。
restart() -> integer()restart(FuncSpec) -> integer()restart(Mod, Func) -> integer()restart(Mod, Func, Arity) -> integer()
类型
在跟踪调用次数的模块中重新启动匹配函数的调用计数器。该FS
参数可以用来指定第一个参数erlang:trace_pattern/3
。见erlang(3)。
所有具有呼叫计数断点的匹配函数的调用计数器都设置为零并且正在运行。
返回可能具有调用计数断点的匹配函数的数量,与返回start/0..3
相同参数相同。
start() -> integer()
开始对所有模块中的所有功能进行呼叫计数跟踪,以及对要加载的模块中的所有功能进行跟踪。这与之相同(start{'_','_','_'})+start{on_load}))。
另见start/1..3
下文。
start(FuncSpec) -> integer()start(Mod, Func) -> integer()start(Mod, Func, Arity) -> integer()
类型
在匹配模块中启动呼叫计数跟踪以匹配功能。该FS
参数可用于指定的第一个参数erlang:trace_pattern/3
,例如on_load
。见erlang(3)。
在没有调用计数断点的匹配函数上设置调用计数断点。呼叫计数器被设置为零,并为所有匹配的功能运行。
返回具有调用计数断点的匹配函数的数目。
stop() -> integer()
停止所有模块中的所有功能的跟踪计数跟踪,以及要加载的模块中的所有功能。这与之相同(stop{'_','_','_'})+stop{on_load}))。
另见stop/1..3
下文。
stop(FuncSpec) -> integer()stop(Mod, Func) -> integer()stop(Mod, Func, Arity) -> integer()
类型
停止匹配模块中的匹配函数的呼叫计数跟踪。该FS
参数可用于指定的第一个参数erlang:trace_pattern/3
,例如on_load
。见erlang(3)。
从具有调用计数断点的匹配函数中删除调用计数断点。
返回可能具有调用计数断点的匹配函数的数量,与返回start/0..3
相同参数相同。
另见
eprof
(3), fprof
(3), erlang(3), User's Guide