Go to the first, previous, next, last section, table of contents.

Generally-available RTS options

The most important RTS options are:

`-H<size>':
Set the heap size to <size> bytes [default: 4M].
`-K<size>':
Set the stack size to <size> bytes [default: 64K]. For concurrent/parallel programs, it is the stack size of the main thread; generally speaking, c/p stacks are in heap. Note: if your program seems to be consuming infinite stack space, it is probably in a loop :-) Of course, if stacks are in the heap, make that infinite heap space...
`-s<file>' or `-S<file>':
Write modest (`-s') or verbose (`-S') garbage-collector statistics into file <file>. The default <file> is <program>`.stat'. The <file> `stderr' is treated specially, with the output really being sent to `stderr'. The amount of heap allocation will typically increase as the total heap size is reduced. The reason for this odd behaviour is that updates of promoted-to-old-generation objects may require the extra allocation of a new-generation object to ensure that there are never any pointers from the old generation to the new generation. For some garbage collectors (not including the default one, sadly), you can convert the `-S' output into a residency graph (in PostScript), using the `stat2resid' utility in the GHC distribution (`ghc/utils/stat2resid').
`-N':
Normally, the garbage collector black-holes closures which are being evaluated, as a space-saving measure. That's exactly what you want for ordinary Haskell programs. When signal handlers are present, however, a computation may be abandoned prematurely, leaving black holes behind. If the signal handler shares one of these black-holed closures, disaster can result. Use the `-N' option to prevent black-holing by the garbage collector if you suspect that your signal handlers may share any subexpressions with the top-level computation. Expect your heap usage to increase, since the lifetimes of some closures may be extended.


Go to the first, previous, next, last section, table of contents.