~/Blog

Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI 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.

Reply via Email Buy me a Coffee
Was this useful? Feel free to share: Hacker News Reddit Twitter