[erlang-questions] How to use dbg and fprof to profile a running server ?

Garrett Smith g@REDACTED
Wed Aug 29 06:16:53 CEST 2012


On Tue, Aug 28, 2012 at 4:17 AM, Bo Chen <chenbo09thss@REDACTED> wrote:
> Hello, every one,
>             I am a rookie in erlang. Recently I am trying to use the dbg and
> fprof module to profile a running server to observe the performance. Since
> the server is based on mochiweb, a quite popular web server framework, and I
> only wish to see the performance of my own code, I tried the dbg module. I
> have tried in the following two ways:
>
> 1: use dbg to write trace to file and use fprof to analyse the result
> dbg:stop_clear(),
> dbg:tracer(port,dbg:trace_port(file,"fprof.trace")),
> dbg:tpl(util,[]),
> dbg:tpl(...),
> dbg:p(all,[call,return_to, procs, timestamp,running,garbage_collection]),
> dbg:stop_clear(),
> fprof:profile(),
> Fname = lists:append("profile/",Name),
> fprof:analyse({dest, Fname}).
>
> 2: like fprof, but use dbg:tpl to confine the module
> fprof:trace([start, {procs, all}]),
> dbg:tpl(util,[]),
> dbg:tpl(...),
> fprof:trace([stop]),
> fprof:profile(),
> Fname = lists:append("profile/",Name),
> fprof:analyse({dest, Fname}).
>
> Sadly, neither way seems to work.
>
> So any idea about how to combine the dbg and fprof module?
> Or maybe someone would like to point out the mistake I have made?
>
> Thanks in advance for your reply~

e2 has a simple tracing helper that you might take a look at:

https://github.com/gar1t/e2

In a shell, you can run e2_debug:trace_module(some_module) or
e2_debug:trace_function(some_module, some_function) and you'll get
simple output printed to the console.

Here's the module:

https://github.com/gar1t/e2/blob/master/src/e2_debug.erl

It's by no means as flexible as using dbg directly, but it's very easy to use.

Garrett



More information about the erlang-questions mailing list