If that is the case then maybe it would help to try and allocate memory in the OCaml's runtime by using mmap() directly.
Yes, i need to try this. 

Is your application completely single-threaded (since you're using lwt), or do you also use multiple threads?
I think that glibc caches mmap-ed areas even if you free them (i.e. they're still mapped into your process but they might be changed via mprotect() to PROT_NONE), which is especially a problem if you use multiple threads.
Lwt use threads for some bloking system calls, so my application has multiple threads.

Strange behaviour is that the before (first|second) compaction all ocaml memory (1GB) was in mmaped area, but after all ocaml memory in placed in brked memory and later all allocations occurs throught brk. major_heap - is 2MB 
  
Best regards,
--Edwin

--
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs