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: chenbo09t...@gmail.com
On Tue, Aug 28, 2012 at 4:17 AM, Bo Chen <chenbo09t...@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:
> 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:
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.
On Aug 28, 2012, at 11:17 AM, Bo Chen <chenbo09t...@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.
> On Aug 28, 2012, at 11:17 AM, Bo Chen <chenbo09t...@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.