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

124 views
Skip to first unread message

Bo Chen

unread,
Aug 28, 2012, 5:17:29 AM8/28/12
to erlang-q...@erlang.org
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~

--
   陈波 / Bill
   2009级本科生
   清华大学软件学院
------------------------------------------------------------
   Chen Bo
   School of Software
   Tsinghua University
   Add: Building Zijing 1# Room 210B,
           Tsinghua University Beijing 100084
           P.R.CHINA
   Tel:  +86-010-51534210
   E-mail: chenbo...@gmail.com

Garrett Smith

unread,
Aug 29, 2012, 12:16:53 AM8/29/12
to Bo Chen, erlang-q...@erlang.org
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
_______________________________________________
erlang-questions mailing list
erlang-q...@erlang.org
http://erlang.org/mailman/listinfo/erlang-questions

Jesper Louis Andersen

unread,
Aug 30, 2012, 11:25:41 AM8/30/12
to Bo Chen, erlang-q...@erlang.org
On Aug 28, 2012, at 11:17 AM, Bo Chen <chenbo...@gmail.com> 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:
>

I would look into eprof first. It will give you profile outputs in the "large" and when you then know where the time is spent I would target that area with fprof. Also, if you are running on multicore, don't skip the thought that you may have to do lock count profiling as well.

For your own code, I would set up a typical test case and then use that as the profile basis for fprof.

Björn-Egil Dahlberg

unread,
Aug 30, 2012, 11:54:19 AM8/30/12
to erlang-q...@erlang.org
On 2012-08-30 17:25, Jesper Louis Andersen wrote:
> On Aug 28, 2012, at 11:17 AM, Bo Chen <chenbo...@gmail.com> 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:
>>
> I would look into eprof first. It will give you profile outputs in the "large" and when you then know where the time is spent I would target that area with fprof. Also, if you are running on multicore, don't skip the thought that you may have to do lock count profiling as well.
>
> For your own code, I would set up a typical test case and then use that as the profile basis for fprof.
I agree with Jesper. Start with eprof to get a feeling for what might be
troublesome.
Also eprof can handle a much higher load than fprof can, i.e. eprof is a
magnitude or two faster.

The lock counter, lcnt, can also handle relative high loads. It can also
dismiss some results thus saving some memory and performance. lcnt can
also be used to see msg-queue locks on erlang processes, thus useful to
profile erlang application and not just to tweak the runtime.

// Björn-Egil
Erlang/OTP
Reply all
Reply to author
Forward
0 new messages