MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да ограничим ресурсите на CPU и RAM за mongodump?

Трябва да използвате cgroups. Точките на монтиране и детайлите са различни за дистрибуции и ядра. т.е. Debian 7.0 със стандартно ядро ​​не монтира cgroupfs по подразбиране и подсистемата на паметта е деактивирана (хората съветват да рестартирате с cgroup_enabled=memory), докато openSUSE 13.1 се доставя с всичко това извън кутията (най-вече поради systemd).

Така че преди всичко създайте точки за монтиране и монтирайте cgroupfs, ако все още не сте го направили от вашата дистрибуция:

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

Създайте cgroup:

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

Настройте cgroup. Реших да променя споделянията на процесора . Стойността по подразбиране за него е 1024, така че настройката му на 128 ще ограничи cgroup до 11% от всички ресурси на процесора, ако има конкуренти. Ако все още има свободни процесорни ресурси, те ще бъдат дадени на mongodump. Можете също да използвате cpuset за ограничаване на броя ядра, достъпни за него.

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

Сега добавете PID към cgroup, това също ще засегне всичките им деца.

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

Пускам няколко теста. Python, който се опитва да разпредели куп mem, беше убит от OOM:

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

Също така съм изпълнявал четири безкрайни цикъла и пети в cgroup. Както се очакваше, цикълът, който беше изпълнен в cgroup, получи само около 45% от процесорното време, докато останалите получиха 355% (имам 4 ядра).

Всички тези промени не оцеляват при рестартиране!

Можете да добавите този код към скрипт, който изпълнява mongodump, или да използвате някакво постоянно решение.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb обобщава (брои) в множество полета едновременно

  2. MongoDB ограничена колекция и монотично нарастващ индекс

  3. Грешно изчисление на разстоянието с MongoDB

  4. странна грешка при mongodb и mongoose:не master и slaveOk=false грешка

  5. Преименувайте поле в резултатите от заявката в MongoDB