
Hello, I came across the following space leak problem today. How can I fix this? (Tested on Mac OS X 10.5.8, GHC 6.10.3) -- test.hs module Main where import System import qualified Data.ByteString.Lazy.Char8 as L main = do args <- getArgs let n = read $ args !! 0 cs <- L.getContents let !a = L.take n cs mapM_ (print . L.length) $ L.lines cs print a -- gen.hs module Main where main = do putStrLn $ take 1000000 $ cycle "foo" main These are compiled with the following options: $ ghc --make -O2 test $ ghc --make -O2 gen The memory usage seems to depend on the argument(=17000) passed. On my MacBook(Core2 Duo 2.0GHz), 16000 works fine. $ ./gen | head -1000 | ./test 17000 +RTS -sstderr ... 3,793,673,564 bytes allocated in the heap 9,901,516 bytes copied during GC 635,576,092 bytes maximum residency (11 sample(s)) 248,725,136 bytes maximum slop 1759 MB total memory in use (562 MB lost due to fragmentation) Generation 0: 6941 collections, 0 parallel, 16.91s, 18.15s elapsed Generation 1: 11 collections, 0 parallel, 0.03s, 0.03s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 3.04s ( 27.64s elapsed) GC time 16.94s ( 18.18s elapsed) EXIT time 0.00s ( 0.01s elapsed) Total time 19.99s ( 45.82s elapsed) %GC time 84.8% (39.7% elapsed) Alloc rate 1,245,766,300 bytes per MUT second Productivity 15.2% of total user, 6.6% of total elapsed $ ./gen | head -1000 | ./test 16000 +RTS -sstderr ... 4,000,652,128 bytes allocated in the heap 7,428,180 bytes copied during GC 1,057,588 bytes maximum residency (1001 sample(s)) 525,092 bytes maximum slop 5 MB total memory in use (1 MB lost due to fragmentation) Generation 0: 6362 collections, 0 parallel, 0.10s, 0.12s elapsed Generation 1: 1001 collections, 0 parallel, 0.09s, 0.09s elapsed INIT time 0.00s ( 0.00s elapsed) MUT time 2.59s ( 23.26s elapsed) GC time 0.18s ( 0.22s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 2.77s ( 23.47s elapsed) %GC time 6.6% (0.9% elapsed) Alloc rate 1,545,246,968 bytes per MUT second Productivity 93.4% of total user, 11.0% of total elapsed -- Regards, Yasuo Uchida