eprof
A Time Profiling Tool for Erlang
The module eprof
provides a set of functions for time
profiling of Erlang programs to find out how the execution time is
used. The profiling is done using the Erlang trace BIFs. Tracing of
local function calls for a specified set of processes is enabled when
profiling is begun, and disabled when profiling is stopped.
When using Eprof, expect a significant slowdown in program execution, in most cases at least 100 percent.
Functions
start() -> {ok,Pid} | {error,Reason}
Pid = pid()
Reason = {already_started,Pid}
Starts the Eprof server which owns the Eprof internal database.
start_profiling(Rootset) -> profiling | error
profile(Rootset) -> profiling | error
Rootset = [atom() | pid()]
Starts profiling for the processes in Rootset
(and any new
processes spawned from them). Information about activity in any
profiled process is stored in the Eprof database.
Rootset
is a list of pids and registered names.
The function returns profiling
if tracing could be enabled
for all processes in Rootset
, or error
otherwise.
stop_profiling() -> profiling_stopped | profiling_already_stopped
Stops profiling started with start_profiling/1
or
profile/1
.
profile(Rootset,Fun) -> {ok,Value} | {error,Reason} | error
profile(Rootset,Module,Function,Args) -> {ok,Value} | {error,Reason} | error
Rootset = [atom() | pid()]
Fun = fun() -> term()
Module = Function = atom()
Args = [term()]
Value = Reason = term()
This function first spawns a process P
which evaluates
Fun()
or apply(Module,Function,Args)
. Then, it
starts profiling for P
and the processes in Rootset
(and any new processes spawned from them). Information about
activity in any profiled process is stored in the Eprof database.
Rootset
is a list of pids and registered names.
If tracing could be enabled for P
and all processes in
Rootset
, the function returns {ok,Value}
when
Fun()
/apply
returns with the value Value
, or
{error,Reason}
if Fun()
/apply
fails with
exit reason Reason
. Otherwise it returns error
immediately.
The programmer must ensure that the function given as argument is truly synchronous and that no work continues after the function has returned a value.
analyse()
Call this function when profiling has been stopped to display the results per process, that is:
- how much time has been used by each process, and
- in which function calls this time has been spent.
Time is shown as percentage of total time, not as absolute time.
total_analyse()
Call this function when profiling has been stopped to display the results per function call, that is in which function calls the time has been spent.
Time is shown as percentage of total time, not as absolute time.
log(File) -> ok
File = atom() | string()
This function ensures that the results displayed by
analyse/0
and total_analyse/0
are printed both to
the file File
and the screen.
stop() -> stopped
Stops the Eprof server.