sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur begränsar jag CPU- och RAM-resurser för mongodump?

Du bör använda cgroups. Monteringspunkter och detaljer är olika på distros och en kärnor. d.v.s. Debian 7.0 med lagerkärna monterar inte cgroupfs som standard och har minnesundersystem inaktiverat (folk rekommenderar att du startar om med cgroup_enabled=memory) medan openSUSE 13.1 levererades med allt det ur kartongen (på grund av systemd mestadels).

Så först och främst, skapa monteringspunkter och montera cgroupfs om det ännu inte gjorts av 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

Skapa en cgroup:

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

Skapa en cgroup. Jag bestämde mig för att ändra processorandelar . Standardvärdet för det är 1024, så att ställa in det till 128 kommer att begränsa cgroup till 11% av alla CPU-resurser, om det finns konkurrenter. Om det fortfarande finns gratis CPU-resurser skulle de ges till mongodump. Du kan också använda cpuset för att begränsa antalet tillgängliga kärnor.

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

Lägg nu till PID:er i cgroup, det kommer också att påverka alla deras barn.

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

Jag kör ett par tester. Python som försöker tilldela en massa medlemmar dödades av OOM:

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

Jag har också kört fyra oändliga loopar och femte i cgroup. Som väntat fick loop som kördes i cgroup bara cirka 45 % av CPU-tiden, medan resten av dem fick 355 % (jag har 4 kärnor).

Alla dessa ändringar överlever inte omstart!

Du kan lägga till den här koden i ett skript som kör mongodump, eller använda någon permanent lösning.




  1. Mongodb distinkt på ett arrayfält med regex-fråga?

  2. Kommer en Mongo $nära att returnera dokument för vilka någon punkt i en MultiPoint är inom räckhåll?

  3. Lagra datum i MongoDB utan att ta hänsyn till tidszonen

  4. Det går inte att använda Mongo Export Query