Search code examples
c++macosdockervirtual-memorydocker-build

"virtual memory exhausted" when building Docker image


When building a Docker image, there's some compilations of C++ scripts and I ended up with errors like:

src/amun/CMakeFiles/cpumode.dir/build.make:134: recipe for target 'src/amun/CMakeFiles/cpumode.dir/cpu/decoder/encoder_decoder_state.cpp.o' failed
virtual memory exhausted: Cannot allocate memory

But when building the same .cpp code on the host machine, it works fine.


After some checking, the error message seems to be similar to the one that people get on a Raspberry Pi, https://www.bitpi.co/2015/02/11/how-to-change-raspberry-pis-swapfile-size-on-rasbian/

And after some more googling, this post on the Mac forum says that:

Swapfiles are dynamically created as needed, until either the disk is full, or the kernel runs out of page table space. I do not think you can change the page table space limits in the Mac OS X kernel. I have not seen anything in all the years I've been using OS X.

Is there a way to increase the swap space for Docker build on Mac OS?

If not, how else can be done to overcome the "virtual memory exhausted" error when building a Docker image?


Solution

  • That does not seem trivial to do with XHyve.
    As stated in this thread

    I think the default size of the VM is 16GB. I kept running out of swap space even after bumping the ram on the VM up to 16GB.

    Check if the method used for a VirtualBox VM would apply in XHyve: see "How to increase the swap space available in the boot2docker virtual machine?"

    boot2docker ssh
    
    export SWAPFILE=/mnt/sda1/swapfile
    sudo dd if=/dev/zero of=$SWAPFILE bs=1024 count=4194304
    sudo mkswap $SWAPFILE
    sudo chmod 600 $SWAPFILE
    sudo swapon $SWAPFILE
    
    exit
    

    Check also this Digital Ocean Setup, again to test in your XHyve context.
    mkswap is also seen here or in docker-root-xhyve/contrib/makehdd/makehdd.sh.