MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm thế nào để giới hạn tài nguyên CPU và RAM cho mongodump?

Bạn nên sử dụng cgroups. Điểm gắn kết và chi tiết khác nhau trên bản phân phối và hạt nhân. I E. Debian 7.0 với hạt nhân cổ phiếu không gắn kết cgroupfs theo mặc định và bị vô hiệu hóa hệ thống con bộ nhớ (mọi người khuyên bạn nên khởi động lại với cgroup_enabled =memory) trong khi openSUSE 13.1 được vận chuyển cùng với tất cả những thứ đó (chủ yếu là do systemd).

Vì vậy, trước hết, hãy tạo điểm gắn kết và gắn kết cgroupfs nếu bản phân phối của bạn chưa thực hiện:

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

Tạo nhóm cgroup:

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

Thiết lập một nhóm. Tôi đã quyết định thay đổi cổ phiếu cpu . Giá trị mặc định cho nó là 1024, vì vậy việc đặt nó thành 128 sẽ giới hạn cgroup đến 11% tất cả tài nguyên CPU, nếu có đối thủ cạnh tranh. Nếu vẫn còn tài nguyên cpu miễn phí, chúng sẽ được cấp cho mongodump. Bạn cũng có thể sử dụng cpuset để giới hạn số lõi có sẵn cho nó.

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

Bây giờ, hãy thêm PID vào nhóm cgroup, nó cũng sẽ ảnh hưởng đến tất cả các con của chúng.

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

Tôi chạy một vài bài kiểm tra. Python cố gắng phân bổ một loạt các mem đã bị OOM giết:

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

Tôi cũng đã chạy bốn vòng lặp vô hạn và thứ năm trong cgroup. Đúng như dự đoán, vòng lặp được chạy trong cgroup chỉ chiếm khoảng 45% thời gian CPU, trong khi phần còn lại chiếm 355% (tôi có 4 lõi).

Tất cả những thay đổi đó không tồn tại khi khởi động lại!

Bạn có thể thêm mã này vào một tập lệnh chạy mongodump hoặc sử dụng một số giải pháp vĩnh viễn.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để thực hiện các truy vấn bộ lọc như vậy trong mongoengine trên các mảng hoặc mảng lồng nhau chứa trong dict với python?

  2. Hiển thị tài liệu MongoDB bằng HTML

  3. MongoDB + Azure + Android:Lỗi:com.mongodb.MongoException:không nói chuyện với chính và thử lại đã sử dụng hết

  4. MongoDB:kiểm tra kết nối với DB

  5. Lược đồ con trên Mongoose không có Mảng