Memory leak in Fudgets
Dimitry Golubovsky
golubovsky at gmail.com
Fri Mar 3 22:46:05 EST 2006
I wrote a very simple Fudgets program (just copies stdin to stdout, no
graphics involved)
-------- leaktest.hs ------------------
module Main where
import Graphics.UI.Fudgets.Fudgets
main = fudlogue (stdoutF >==< stdinF)
and ran it like this:
yes | leaktest
I found out that the program grows in memory. Its "traditional" analog:
-------- leaktest2.hs -----------------
module Main where
import System.IO
main = do hGetLine stdin >>= hPutStrLn stdout
main
works in constant space.
I tried to observe the GC realtime stats with +RTS -Sstderr -M600K
It turns out, garbage is collected, number of allocated and collected
bytes are mostly constant, and number of live bytes fluctuates, but
averagely stays the same:
Alloc Collect Live GC GC TOT TOT Page Flts
bytes bytes bytes user elap user elap
316720 262144 9528 0.00 0.00 0.02 0.02 144 499 (Gen: 0)
262128 262144 22188 0.01 0.01 0.03 0.04 0 3 (Gen: 0)
262128 262144 8276 0.00 0.00 0.04 0.05 0 0 (Gen: 0)
262128 262144 24612 0.01 0.01 0.05 0.06 0 0 (Gen: 0)
262128 262144 10680 0.00 0.00 0.06 0.07 0 0 (Gen: 0)
262128 262144 23376 0.00 0.00 0.06 0.08 0 0 (Gen: 0)
262128 262144 9444 0.00 0.00 0.07 0.09 0 0 (Gen: 0)
262012 262144 25492 0.00 0.00 0.07 0.10 0 0 (Gen: 0)
... program grows to 10M .........
262128 262144 1684 0.01 0.01 42.33 66.10 0 0 (Gen: 0)
262128 262144 13396 0.01 0.01 42.34 66.11 0 0 (Gen: 0)
262124 262144 25540 0.01 0.01 42.35 66.12 0 0 (Gen: 0)
262128 262144 11988 0.00 0.00 42.35 66.13 0 0 (Gen: 0)
262128 262144 1760 0.00 0.00 42.36 66.14 0 0 (Gen: 0)
262128 262144 14464 0.00 0.00 42.37 66.15 0 0 (Gen: 0)
262128 262144 1656 0.00 0.00 42.37 66.16 0 0 (Gen: 0)
.... and was interrupted ...........
1,614,769,480 bytes allocated in the heap
78,801,952 bytes copied during GC
25,624 bytes maximum residency (6160 sample(s))
6160 collections in generation 0 ( 10.35s)
1 Mb total memory in use
INIT time 0.01s ( 0.00s elapsed)
MUT time 32.01s ( 55.38s elapsed)
GC time 10.35s ( 10.78s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 42.37s ( 66.16s elapsed)
%GC time 24.4% (16.3% elapsed)
Alloc rate 50,430,027 bytes per MUT second
Productivity 75.5% of total user, 48.4% of total elapsed
So, what could be the reason of such memory leak? What else may grow
if the heap remains constant? How can it be observed?
Any ideas are welcome.
--
Dimitry Golubovsky
Anywhere on the Web
More information about the Glasgow-haskell-users
mailing list