~/Blog

Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI, Writer of Tidbits, and Linux Enthusiast

Limiting MongoDB Resource Usage within Docker Compose

Published on

Updated on

Warning: This technique does not work for the older Docker Compose v3

One of my web services utilizes MongoDB as the database backend. It lives on one of the smaller sized virtual private servers with only 1GB of RAM and 1 CPU. Every so often I encounter a scenario where MongoDB is taking all of the sytem resources, so I started looking into how to limit it.

First, we can set some limits to container in general within docker-compose.

Example:

mongo:
  image: docker.io/mongo:5.0
  mem_limit: 256m
  cpus: 0.25

This says that the mongo container can only use a maximum of 256MB of memory and can only use up to 25% of one CPU.

To see a detailed list of possible options, check out the docker documentation.

Keep in mind that your memory and CPUs are not virtualized, therefore the container can see all the resources available, it just cannot request them.

This may lead to some problems depending on the codebase. For example, in MongoDB the WiredTiger internal cache is by default set to 50% of the total amount of RAM minus 1GB.

Luckily we can change this default, by adding a flag within the docker-compose file.

mongo:
  image: docker.io/mongo:5.0
  mem_limit: 256m
  cpus: 0.25
  command: --wiredTigerCacheSizeGB 0.25

The wiredTigerCacheSizeGB takes values between 0.25 GB and 10000 GB.


Have any questions or want to chat: Reply via Email

Enjoyed this post?

Published a response to this? :