MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann man CPU- und RAM-Ressourcen für Mongodump begrenzen?

Sie sollten cgroups verwenden. Einhängepunkte und Details sind bei Distributionen und Kerneln unterschiedlich. Dh Debian 7.0 mit Stock-Kernel mountet cgroupfs nicht standardmäßig und hat das Speicher-Subsystem deaktiviert (die Leute raten, mit cgroup_enabled=memory neu zu starten), während openSUSE 13.1 mit all dem sofort ausgeliefert wird (meistens wegen systemd).

Erstellen Sie also zunächst Mount-Punkte und mounten Sie cgroupfs, falls dies noch nicht von Ihrer Distribution getan wurde:

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

Erstellen Sie eine Kontrollgruppe:

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

Richten Sie eine Kontrollgruppe ein. Ich habe mich entschieden, CPU-Freigaben zu ändern . Der Standardwert dafür ist 1024, wenn Sie ihn also auf 128 setzen, wird cgroup auf 11 % aller CPU-Ressourcen begrenzt, wenn es Konkurrenten gibt. Wenn noch freie CPU-Ressourcen vorhanden sind, werden diese an Mongodump übergeben. Sie können auch cpuset verwenden um die Anzahl der ihm zur Verfügung stehenden Kerne zu begrenzen.

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

Fügen Sie jetzt PIDs zur Kontrollgruppe hinzu, es wirkt sich auch auf alle ihre Kinder aus.

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

Ich führe ein paar Tests durch. Python, der versucht, einen Haufen Speicher zuzuweisen, wurde von OOM getötet:

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

Ich habe auch vier Endlosschleifen und die fünfte in Cgroup ausgeführt. Wie erwartet erhielt eine Schleife, die in cgroup ausgeführt wurde, nur etwa 45 % der CPU-Zeit, während der Rest 355 % erhielt (ich habe 4 Kerne).

All diese Änderungen überleben keinen Neustart!

Sie können diesen Code zu einem Skript hinzufügen, das Mongodump ausführt, oder eine dauerhafte Lösung verwenden.