Heap profiling with nhc98
Heap profiling allows a programmer to see how heap space is
being used within their program. This can enable space "leaks"
to be identified, and their causes tracked down.
To obtain a heap profile of a computation:
-
Compile all modules of the program with the -p option;
also specify -p at link-time. Using
hmake -p does all the necessary compiling and
linking automatically. eg. to compile MyProg.hs and
everything it depends on for heap profiling simply use
hmake -p MyProg
-
Run the program with additional runtime arguments:
e.g. ./MyProg +RTS -p -RTS
to output "producer" heap profile data to the file
MyProg.hp
-
Convert the raw profile data to a PostScript graph with
the utility hp2graph, and view it in your favorite
viewer.
Heap profiling options
-isize
|
set the profiling interval to size
(in number of allocations, or in seconds)
|
-p
|
select producer profiling
|
-c
|
select construction profiling
|
-m
|
select per-module profiling
|
-r[num]
|
select retainer profiling - num is maximum retainer set size
(default=1)
|
-l
|
select lifetime profiling
|
-b
|
select biographical profiling
|
-pnames
|
restrict profile to named producers
|
-cnames
|
restrict profile to named constructions
|
-mnames
|
restrict profile to named modules
|
-rnames
|
restrict profile to named retainers
(default=1)
|
-lnums
|
restrict profile to numbered lifetimes
(min-, -max, or min-max)
|
-bname
|
restrict profile to named biographical phase
(lag, drag, void, or use)
|
The first occurrence of
any of the options pcmrbl determines the primary form of the
profile. Subsequent pcmrbl options introduce restrictions on
the profile, for instance -p -c: asks for a producer profile
restricted to producers of the `:' (list) construction. Restrictions
are almost all orthogonal to each other, and you may have as many as
you like. Except for biography and lifetime restrictions, the format
is of a list of names, separated by commas. (In general, you may need to
use quotes around the list to protect special characters from the shell.)
The latest updates to these pages are available on the WWW from
http://www.haskell.org/nhc98/
York Functional Programming Group
|