sql >> Databáze >  >> NoSQL >> MongoDB

Jak omezit zdroje CPU a RAM pro mongodump?

Měli byste použít cgroups. Připojovací body a detaily se liší v distribucích a jádrech. Tj. Debian 7.0 se základním jádrem nepřipojuje cgroupfs ve výchozím nastavení a má zakázaný paměťový subsystém (lidé doporučují restartovat pomocí cgroup_enabled=memory), zatímco openSUSE 13.1 je dodáván se vším rozbalením (většinou kvůli systemd).

Nejprve tedy vytvořte přípojné body a připojte cgroupfs, pokud to ještě neudělalo vaše 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

Vytvořte cgroup:

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

Nastavte cgroup. Rozhodl jsem se změnit sdílení CPU . Výchozí hodnota je 1024, takže nastavení na 128 omezí cgroup na 11 % všech zdrojů CPU, pokud existují konkurenti. Pokud jsou stále volné zdroje CPU, byly by poskytnuty mongodump. Můžete také použít cpuset omezit počet jader, která má k dispozici.

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

Nyní přidejte PID do cgroup, ovlivní to také všechny jejich potomky.

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

Provádím pár testů. Python, který se pokouší alokovat spoustu paměti, byl zabit OOM:

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

Také jsem spustil čtyři nekonečné smyčky a pátou v cgroup. Jak se očekávalo, smyčka, která byla spuštěna v cgroup, zabrala jen asi 45 % procesorového času, zatímco zbytek z nich dostal 355 % (mám 4 jádra).

Všechny tyto změny nepřežijí restart!

Tento kód můžete přidat do skriptu, který spouští mongodump, nebo použít nějaké trvalé řešení.




  1. Emoji nejsou správně uloženy v mongodb

  2. MongoDB sečte pole z více dokumentů na základě jednotlivých prvků

  3. Mongoose, MongoDB:Jak uložit() dokument po push()?

  4. hodit novou mongoose.Error.MissingSchemaError(název); ^ MongooseError:Schéma nebylo zaregistrováno pro obchodníka s modely