sql >> Database >  >> NoSQL >> MongoDB

Hoe CPU- en RAM-bronnen voor mongodump te beperken?

Je moet cgroups gebruiken. Aankoppelpunten en details zijn anders op distro's en kernels. D.w.z. Debian 7.0 met stock-kernel koppelt standaard cgroupfs niet aan en heeft het geheugensubsysteem uitgeschakeld (mensen adviseren om opnieuw op te starten met cgroup_enabled=memory) terwijl openSUSE 13.1 met dat alles uit de doos werd geleverd (meestal vanwege systemd).

Maak dus eerst aankoppelpunten en koppel cgroupfs aan als dit nog niet door uw distro is gedaan:

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

Maak een cgroep:

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

Zet een cgroep op. Ik heb besloten om cpu-shares te wijzigen . De standaardwaarde hiervoor is 1024, dus als u deze instelt op 128, wordt cgroup beperkt tot 11% van alle CPU-bronnen, als er concurrenten zijn. Als er nog steeds gratis cpu-bronnen zijn, zouden deze aan mongodump worden gegeven. U kunt ook cpuset . gebruiken om het aantal beschikbare cores te beperken.

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

Voeg nu PID's toe aan de cgroup, het zal ook van invloed zijn op al hun kinderen.

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

Ik doe een paar tests. Python die een heleboel mem probeert toe te wijzen, is vermoord door OOM:

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

Ik heb ook vier oneindige lussen uitgevoerd en de vijfde in cgroup. Zoals verwacht kreeg de lus die in cgroup werd uitgevoerd slechts ongeveer 45% van de CPU-tijd, terwijl de rest 355% kreeg (ik heb 4 kernen).

Al die veranderingen overleven het opnieuw opstarten niet!

Je kunt deze code toevoegen aan een script dat mongodump draait, of een permanente oplossing gebruiken.




  1. Docker-compose , toch om een ​​redis.conf-bestand op te geven?

  2. MongoDB-query's loggen met Spring Boot

  3. Hoe afbeeldingen in mongoDB invoegen met java?

  4. Hoe object-ID's in Mongo db te overschrijven tijdens het maken van een app in Sails