From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id VAA22457 for caml-red; Mon, 2 Oct 2000 21:30:17 +0200 (MET DST) Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id TAA19579 for ; Mon, 2 Oct 2000 19:11:38 +0200 (MET DST) Received: from cepheus.azstarnet.com (cepheus.azstarnet.com [169.197.56.195]) by nez-perce.inria.fr (8.10.0/8.10.0) with ESMTP id e92HBan19097; Mon, 2 Oct 2000 19:11:36 +0200 (MET DST) Received: from dylan (dialup15ip063.tus.azstarnet.com [169.197.37.63]) by cepheus.azstarnet.com (8.9.3/8.9.3) with SMTP id KAA20027; Mon, 2 Oct 2000 10:11:31 -0700 (MST) X-Sent-via: StarNet http://www.azstarnet.com/ Message-ID: <004d01c02c94$4ed8d8f0$210148bf@dylan> From: "David McClain" To: "Damien Doligez" , Subject: Re: Garbage collection in OCaml Date: Mon, 2 Oct 2000 10:15:02 -0700 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 4.72.3110.5 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Sender: weis@pauillac.inria.fr Yes, Thanks so much for your helpful suggestions! Your Gc settings were what I was hoping to find from someone with insight to the behavior of the GC. I am trying them as we speak! Cheers! - DM -----Original Message----- From: Damien Doligez To: caml-list@inria.fr Date: Monday, October 02, 2000 4:32 AM Subject: Re: Garbage collection in OCaml >>From: "David McClain" > >>I have a long running analysis program written in compiled OCaml (ocamlopt). >>If I let it run without interference it gradually allocates more and more >>memory until the system swap space is exhausted. At that point the program >>bombs off with an "out of memory" errror - probably generated by the OCaml >>array management routines. > >Most likely, a fragmentation problem. If you're using a lot of arrays >or strings with different sizes, it can happen. > > >>OTOH, I found by tinkering that placing a Gc.compact() in a periodically >>performed place, I manage to keep the entire system running within about 70 >>MBytes. (My machines all have 256 MB RAM or more). > >Thus we know for sure it was a fragmentation problem. > > >>I have found that placing a Gc.full_major() does virtually nothing to >>prevent the exhaustion of memory, although it slows it down ever so >>slightly. > >Gc.full_major() is not going to help, that's normal. > > >>The program was compiled to run with the default GC settings (whatever those >>are). That is to say, I did nothing to configure the GC system at program >>startup. >> >>Is this behavior normal? Must I plant strategic Gc.compact() in my code? I >>would have thought the GC would be more self monitoring. > >Calling Gc.compact() is one solution. You could also try setting >max_overhead in the Gc.control record. For example, if you do: > > Gc.set { (Gc.get ()) with Gc.max_overhead = 200 } > >then Gc.compact() will get called automatically when the free memory >is 200% the size of the live data. This setting is not activated by >default because compaction is not incremental, so it introduces a long >pause in the computation, which would be annoying for an interactive >program. > >-- Damien >