erlang性能分析工具

Etop

类似top命令,查看erlang进程占用cpu、内存较高的进程

参数:

node        atom       erlang node

port        integer    The used port

accumulate  boolean    If true execution time is accumulated

lines       integer    Number of displayed processes

interval    integer    Display update interval in secs

sort        runtime | reductions | memory | msg_q

output      graphical | text

tracing     on | off

setcookie   string

使用举例:

1. 找出cpu占用最高的进程,图形界面输出,每10秒更新一次

> spawn(fun() -> etop:start([{interval,10}, {sort, runtime}]) end).
> etop:stop().

2. 找出内存占用较高进程, 输出进程的数量为20,文本形式输出

> spawn(fun() -> etop:start([{output, text}, {lines, 20},  {sort, memory}]) end).
> etop:stop().

3. 查看远程节点etop:

 > erl -name [email protected] -hidden -s etop -output text -sort memory -lines 20 -node '[email protected]' -setcookie mycookie123

或者:

> erl -name [email protected] -hidden
> etop:start([{node,'[email protected]'}, {setcookie, "mycookie123"}, {output, text}, {lines, 20},  {sort, memory}])

当然我们还可以使用rpc:call

> erl -name [email protected] -setcookie mycookie123
> rpc:call('[email protected]', etop, start, [{output, text}, {lines, 20},  {sort, memory}]).

eprof

假设我们使用etop查到了cpu占用时间较多的进程id,那么可以使用eprof进行进一步的分析.

基本用法:

> eprof:start().
> eprof:profile([pid(x,x,x)]).
> eprof:stop_profiling().
> eprof:analyze().
> eprof:stop().

或:

> eprof:start_profiling([regNames], {gen, call, 4}).
> eprof:stop_profiling().
> eprof:analyze().
> eprof:stop().

regNames可以填写进程的注册名, {gen, call, 4}表示只记录gen:call/4这个函数

analyze结果示例:

****** Process <0.60.0>    -- 100.00 % of profiled time ***
FUNCTION                 CALLS      %  TIME  [uS / CALLS]
--------                 -----    ---  ----  [----------]
gen:call/4                   2   0.00     0  [      0.00]
gen:do_call/4                2   0.22     1  [      0.50]
gen_server:call/2            2   0.44     2  [      1.00]
dbutil:i_connect/1           2   0.66     3  [      1.50]
gen:call/3                   2   0.66     3  [      1.50]
resource_pool:get/1          2   0.66     3  [      1.50]
mvar:modify/2                2   0.66     3  [      1.50]
gen_server:decode_msg/8      4   0.88     4  [      1.00]
erlang:monitor/2             2   0.88     4  [      2.00]
erlang:demonitor/2           2   1.33     6  [      3.00]
gen_server:handle_msg/5      4   1.55     7  [      1.75]
myserver:handle_call/3       4   1.77     8  [      2.00]
gen_server:loop/6            4   1.99     9  [      2.25]
erlang:send/3                2   3.76    17  [      8.50]
gen_server:reply/2           4  84.51   382  [     95.50]

fprof

fprof类似eprof,但是会把详细信息存储到文件中,方便数据统计分析。

只看某一函数的简单调用方法:

1> fprof:apply(Module, fun, Args).
2> fprof:profile().
3> fprof:analyse().

实际上在执行的时候,fprof:apply/3前后会自动添加trace([start, ...]) 和
trace(stop).

完整的写法是:

> fprof:trace([start, {file, "./fprof.trace"}, {procs, PidSpec}]).  %% 或者可以trace多个Pid,[PidSpec]
> fprof:trace(stop).
> fprof:profile({file, "./fprof.trace"}).
> fprof:analyse([{dest, "fprof.analysis"}, append, {sort,own}]).  %% 详细参数见: http://www.erlang.org/doc/man/fprof.html#analyse-2

结果示例:

1> fprof:apply(lists, reverse, ["abcdef"]).
"fedcba"
2> fprof:profile().
Reading trace data...

End of trace!
ok
3> fprof:analyse().
Processing data...
Creating output...
%% Analysis results:
{  analysis_options,
 [{callers, true},
  {sort, acc},
  {totals, false},
  {details, true}]}.

%                                               CNT       ACC       OWN
[{ totals,                                        3,    0.027,    0.027}].  %%%

%                                               CNT       ACC       OWN
[{ "<0.33.0>",                                    3,undefined,    0.027}].   %%

{[{undefined,                                     0,    0.027,    0.019}],
 { {fprof,apply_start_stop,4},                    0,    0.027,    0.019},     %
 [{{lists,reverse,1},                             1,    0.008,    0.005},
  {suspend,                                       1,    0.000,    0.000}]}.    

{[{{fprof,apply_start_stop,4},                    1,    0.008,    0.005}],
 { {lists,reverse,1},                             1,    0.008,    0.005},     %
 [{{lists,reverse,2},                             1,    0.003,    0.003}]}.    

{[{{lists,reverse,1},                             1,    0.003,    0.003}],
 { {lists,reverse,2},                             1,    0.003,    0.003},     %
 [ ]}.

{[ ],
 { undefined,                                     0,    0.000,    0.000},     %
 [{{fprof,apply_start_stop,4},                    0,    0.027,    0.019}]}.    

{[{{fprof,apply_start_stop,4},                    1,    0.000,    0.000}],
 { suspend,                                       1,    0.000,    0.000},     %
 [ ]}.

Done!
ok

erlang性能分析工具

时间: 2024-11-04 08:27:23

erlang性能分析工具的相关文章

[Erlang_Question21]Erlang性能分析工具eprof fporf的应用

前段时间项目改代码突然cpu波动很大,排查了好久都没有找到原因,只能求助于性能测试工具 : <<Erlang程序设计>>----Joe Armstorng[哈哈,登月第一人也叫Armstrong] P416 cprof测试每个函数被调用了多少次,这个工具为轻量在运行系统上使用这个工具会给系统带来5%~10%的额外负载 fprof显示函数调用和被调用的埋单,并将结果输出到一个文件中,这个工具比较适合于在实验环境或模拟环境中对进行大规模的性能前一段,它会带来非常显著的系统负载. epr

三种Linux性能分析工具的比较

无论是在CPU设计.服务器研发还是存储系统开发的过程中,性能总是一个绕不过去的硬指标.很多时候,我们发现系统功能完备,但就是性能不尽如意,这时候就需要找到性能瓶颈.进行优化.首先我们需要结合硬件特点.操作系统和应用程序的特点深入了解系统内部的运行机制.数据流图和关键路径,最好找出核心模块.建立起抽象模型:接着需要利用各种性能分析工具,探测相关模块的热点路径.耗时统计和占比.在这方面,Linux操作系统自带了多种灵活又具有专对性的工具,此外一些厂家也开源了不少优秀的性能分析工具.下面就结合笔者最近

Java 性能分析工具

如何利用 JConsole观察分析Java程序的运行,进行排错调优 http://jiajun.iteye.com/blog/810150 如何使用JVisualVM进行性能分析 http://jiajun.iteye.com/blog/1180230 全功能的Java剖析工具(profiler) http://www.blogjava.net/mrzhangshunli/archive/2007/08/27/140088.html http://www.cnblogs.com/jayzee/p

.NET 性能分析工具

Download .NET Profiler http://www.yourkit.com/dotnet/download/ dotTrace 5.5 Performance http://www.jetbrains.com/profiler/ .NET 性能分析工具,布布扣,bubuko.com

系统级性能分析工具perf的介绍与使用

测试环境:Ubuntu14.04  on VMWare Kernel:3.13.0-32 系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化.性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码.代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能. 在性能剖析阶段,需要借助于现有的profiling工具,如perf等.在代码优化阶段往往需要借助开发者的经验,编写简洁高效的代码,甚至在汇编级别合理使用各种指令,合理安排各种指

linux下面的性能分析工具简介

iostat 命令详解 iostat用于输出cpu和磁盘I/O相关的统计信息.命令格式: Usage: iostat [ options ] [ <interval> [ <count> ] ] Options are: [ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ] [ -j { ID | LABEL | PATH | UUID | ... } [ <devi

性能分析工具-PerfView

Roslyn的PM(程序经理) Bill Chiles,Roslyn使用纯托管代码开发,但性能超过之前使用C++编写的原生实现,这有什么秘诀呢?他最近写了一篇文章叫做<Essential Performance Facts and .NET Framework Tips>里头推荐了一个性能分析工具<Improving Your App's Performance with PerfView>.PerfView能够收集Windows事件跟踪(ETW)数据来追踪程序的调用流向,这些程序

Java性能优化指南系列(二):Java 性能分析工具

进行JAVA程序性能分析的时候,我们一般都会使用各种不同的工具.它们大部分都是可视化的,使得我们可以直观地看到应用程序的内部和运行环境到底执行了什么操作,所以性能分析(性能调优)是依赖于工具的.在第2章,我强调了基于数据驱动的性能测试是非常重要的,我们必须测试应用的性能并理解每个指标的含义.性能分析和数据驱动非常类似,为了提升应用程序的性能,我们必须获取应用运行的相关数据.如何获取这些数据并理解它们是本章的主题.[本章重点介绍JDK中提供的性能分析工具] 操作系统工具及其分析 程序分析的起点并不

Oracle性能分析工具介绍及使用

oracle数据库级别优化分析工具介绍 当我们对数据库优化诊断时,需要收集相应的信息以供参考,从个人的使用经验来说,这种统计数据分为两大类 一类是数据库级别的统计信息二类是os级别的统计信息 下面就分别介绍在不同的级别下,常用什么工具来收集信息帮助优化诊断 首先是oracle数据库级别优化分析工具介绍 目录: 1.statspack2.ASH3.AWR4.ORACLE EXPLAIN PLAN的总结(查询sql的执行计划)   a.autotrace   b.explain的使用 1.stats