From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA07261; Fri, 28 May 2004 11:10:32 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id LAA00729 for ; Fri, 28 May 2004 11:10:31 +0200 (MET DST) Received: from aomori.annexia.org (annexia.force9.co.uk [212.56.101.183]) by concorde.inria.fr (8.12.10/8.12.10) with ESMTP id i4S9AUSH010876 for ; Fri, 28 May 2004 11:10:30 +0200 Received: from rich by aomori.annexia.org with local (Exim 3.36 #1 (Debian)) id 1BTdNl-0001Wd-00 for ; Fri, 28 May 2004 10:10:29 +0100 Date: Fri, 28 May 2004 10:10:29 +0100 To: caml-list@inria.fr Subject: [Caml-list] Out_of_memory exception in output_value Message-ID: <20040528091029.GA5436@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.5.1+cvs20040105i From: Richard Jones X-Miltered: at concorde with ID 40B70206.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; allocator:01 allocating:01 bug:01 ocamlopt:01 prerr:01 endline:01 prerr:01 endline:01 1640:99 3103:99 1640:99 crm:99 consultancy:99 bin:01 ltd:98 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk I have a problem with a real program which tries to write an approx 200 MB data structure to disk using output_value. The output_value statement throws an Out_of_memory exception, even though the Unix process itself is only using around 350 MB on a machine with plenty of physical RAM and swap. The test program below reproduces the problem. Is there any way I can tell the memory allocator that it's allowed to keep allocating memory, or work around this bug in another way? Rich. --- (* ocamlopt -w s unix.cmxa memtest.ml -o memtest *) let arraylen = 200000 let stringlen = 1000 let () = prerr_endline "Creating big structure ..."; let data = Array.init arraylen (fun i -> String.create stringlen) in prerr_endline "Sleeping for 5 seconds ..."; Unix.sleep 5; prerr_endline "Saving big structure to a file ..."; let chan = open_out_bin "/tmp/test.dat" in output_value chan data; close_out chan; ignore (Sys.command "ls -lh /tmp/test.dat") --- $ ./memtest Creating big structure ... Sleeping for 5 seconds ... Saving big structure to a file ... Fatal error: exception Out_of_memory During the sleep: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3098 rich 25 0 203m 198m 1640 S 43.4 42.0 0:03.21 memtest Just before the crash: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3103 rich 18 0 333m 301m 1640 D 1.7 63.7 0:04.49 memtest -- Richard Jones. http://www.annexia.org/ http://www.j-london.com/ Merjis Ltd. http://www.merjis.com/ - improving website return on investment http://www.winwinsales.co.uk/ - CRM improvement consultancy ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners