sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan begrænser jeg CPU- og RAM-ressourcer til mongodump?

Du bør bruge cgroups. Monteringspunkter og detaljer er forskellige på distros og kerner. dvs. Debian 7.0 med lagerkerne monterer ikke cgroupfs som standard og har hukommelsessubsystem deaktiveret (folk anbefaler at genstarte med cgroup_enabled=memory), mens openSUSE 13.1 blev leveret med alt det ud af æsken (for det meste på grund af systemd).

Så først og fremmest, opret monteringspunkter og monter cgroupfs, hvis det endnu ikke er gjort af din distro:

mkdir /sys/fs/cgroup/cpu
mount -t cgroup -o cpuacct,cpu cgroup /sys/fs/cgroup/cpu

mkdir /sys/fs/cgroup/memory
mount -t cgroup -o memory cgroup /sys/fs/cgroup/memory

Opret en cgroup:

mkdir /sys/fs/cgroup/cpu/shell
mkdir /sys/fs/cgroup/memory/shell

Opret en cgroup. Jeg besluttede at ændre cpu-andele . Standardværdien for den er 1024, så at sætte den til 128 vil begrænse cgroup til 11% af alle CPU-ressourcer, hvis der er konkurrenter. Hvis der stadig er gratis cpu-ressourcer, vil de blive givet til mongodump. Du kan også bruge cpuset for at begrænse antallet af tilgængelige kerner.

echo 128 > /sys/fs/cgroup/cpu/shell/cpu.shares
echo 50331648 > /sys/fs/cgroup/memory/shell/memory.limit_in_bytes

Tilføj nu PID'er til cgroup, det vil også påvirke alle deres børn.

echo 13065 >  /sys/fs/cgroup/cpu/shell/tasks
echo 13065 >  /sys/fs/cgroup/memory/shell/tasks

Jeg kører et par tests. Python, der forsøger at tildele en masse medlemmer, blev dræbt af OOM:

[email protected]:~$ python -c 'l = range(3000000)'
Killed

Jeg har også kørt fire uendelige loops og femte i cgroup. Som forventet fik loop, der blev kørt i cgroup, kun omkring 45 % af CPU-tiden, mens resten af ​​dem fik 355 % (jeg har 4 kerner).

Alle disse ændringer overlever ikke genstart!

Du kan tilføje denne kode til et script, der kører mongodump, eller bruge en permanent løsning.




  1. MongoDB-forespørgselskommentarer sammen med brugeroplysninger

  2. MongoDb brugerdefineret samling serializer

  3. Hvordan grupperer man samlet, men viser også andre felter ved hjælp af Mongo?

  4. Skub element i en hvilken som helst position af array i underdokumentet