MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara membatasi sumber daya CPU dan RAM untuk mongodump?

Anda harus menggunakan cgroups. Mount point dan detail berbeda pada distro dan kernel. Yaitu. Debian 7.0 dengan kernel stok tidak me-mount cgroupfs secara default dan memiliki subsistem memori yang dinonaktifkan (orang-orang menyarankan untuk mem-boot ulang dengan cgroup_enabled=memory) sementara openSUSE 13.1 dikirimkan dengan semua itu di luar kotak (kebanyakan karena systemd).

Jadi pertama-tama buat mount point dan mount cgroupfs jika belum dilakukan oleh distro Anda:

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

Buat cgrup:

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

Siapkan cgrup. Saya memutuskan untuk mengubah berbagi cpu . Nilai default untuk itu adalah 1024, jadi menyetelnya ke 128 akan membatasi cgroup hingga 11% dari semua sumber daya CPU, jika ada pesaing. Jika masih ada sumber daya cpu gratis, mereka akan diberikan ke mongodump. Anda juga dapat menggunakan cpuset untuk membatasi jumlah inti yang tersedia untuknya.

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

Sekarang tambahkan PID ke cgroup itu juga akan mempengaruhi semua anak mereka.

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

Saya menjalankan beberapa tes. Python yang mencoba mengalokasikan banyak mem Dibunuh oleh OOM:

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

Saya juga menjalankan empat loop tak terbatas dan kelima di cgroup. Seperti yang diharapkan, loop yang dijalankan di cgroup hanya mendapat sekitar 45% dari waktu CPU, sedangkan sisanya mendapat 355% (saya punya 4 core).

Semua perubahan itu tidak bertahan saat reboot!

Anda dapat menambahkan kode ini ke skrip yang menjalankan mongodump, atau menggunakan beberapa solusi permanen.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Skala Mulus Untuk Server MongoDB Anda

  2. Mengurangi ukuran file database MongoDB

  3. Luwak dengan ReplicaSet di Atlas

  4. Luwak:Baca di ReplicaSet

  5. Mongo:agregat $geoNear dan $text tidak ada hasil