Unexpected Copy-on-Write

Memory is duplicated when forking and calling GC in 2.1.3.

We have written a small program that reproduces the issue (see attached
file).

The program instantiates an object and then forks into two

processes.
The GC is called in the child process.
The memory allocation (as given by /proc/pid/smaps) changes from
shared to private, thereby indicating a doubling of memory consumption.

Here is the output of the program (size is in mb):

ruby version 2.1.3
time pid message shared private
4.011s 4723 Parent pre GC 68 0
4.013s 4737 Child pre GC 68 0
8.019s 4723 Parent post GC 5 62
8.093s 4737 Child post GC 5 66

We have tested the program on Ubuntu 14.04 with ruby 2.1.3 and 2.1.5.

We have also tried to fork 10 children and see a 10 doubling of the
memory consumption, the issue only occurs after running the GC.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs