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

redis bgsave không thành công vì fork Không thể cấp phát bộ nhớ

Cụ thể hơn, từ Câu hỏi thường gặp về Redis

Lược đồ tiết kiệm nền của Redis dựa trên ngữ nghĩa sao chép-ghi-chép của fork trong các hệ điều hành hiện đại:Redis fork (tạo một tiến trình con) là một bản sao chính xác của bản chính. Tiến trình con kết xuất DB trên đĩa và cuối cùng thoát. Về lý thuyết, đứa trẻ nên sử dụng nhiều bộ nhớ như bản sao của cha mẹ, nhưng trên thực tế, nhờ ngữ nghĩa copy-on-write được thực hiện bởi hầu hết các hệ điều hành hiện đại, tiến trình cha và con sẽ chia sẻ các trang bộ nhớ chung. Một trang sẽ chỉ được nhân bản khi nó thay đổi ở phần con hoặc phần mẹ. Vì về lý thuyết, tất cả các trang có thể thay đổi trong khi quy trình con đang lưu, Linux không thể cho biết trước dung lượng bộ nhớ con sẽ chiếm, vì vậy nếu cài đặt overcommit_memory được đặt thành zero fork sẽ không thành công trừ khi có nhiều RAM trống như yêu cầu thực sự sao chép tất cả các trang bộ nhớ mẹ, với kết quả là nếu bạn có tập dữ liệu Redis là 3 GB và chỉ có 2 GB bộ nhớ trống, nó sẽ không thành công.

Đặt overcommit_memory thành 1 cho biết Linux thư giãn và thực hiện fork theo cách phân bổ lạc quan hơn và đây thực sự là điều bạn muốn đối với Redis.

Redis không cần nhiều bộ nhớ như hệ điều hành nghĩ rằng nó cần để ghi vào đĩa, vì vậy có thể xảy ra lỗi trước khi fork.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kiến trúc cho bộ nhớ cache Redis và Mongo cho sự bền bỉ

  2. xử lý các tình huống tối đa của redis với đường ray khi sử dụng bộ nhớ đệm đường ray

  3. Làm thế nào để sử dụng redis '`DUMP` và` RESTORE` (ngoại tuyến)?

  4. Cần tây celerybeat có thể sử dụng Trình lập lịch cơ sở dữ liệu mà không có Django không?

  5. Cách sử dụng Redis từ Node.js