Dưới đây là một số nguồn tiêu thụ bộ nhớ "ẩn" trong Redis:
-
Marc đã đề cập đến các bộ đệm do chủ duy trì để nuôi nô lệ. Nếu một nô lệ bị tụt hậu so với cái chính của nó (vì nó chạy trên một hộp chậm hơn chẳng hạn), thì một số bộ nhớ sẽ bị tiêu tốn trên cái chính.
-
khi các lệnh đang chạy dài được phát hiện, Redis ghi chúng vào vùng SLOWLOG, vùng này chiếm một số bộ nhớ. Bạn có thể muốn sử dụng lệnh SLOWLOG LEN để kiểm tra số lượng bản ghi bạn có ở đây.
-
bộ đệm giao tiếp cũng có thể chiếm bộ nhớ. Theo như tôi nhớ, với các phiên bản cũ của Redis (và 2.4 đã khá cũ - bạn thực sự nên nâng cấp), nó không bị ràng buộc, có nghĩa là nếu bạn chuyển một đối tượng lớn tại một điểm, bộ đệm giao tiếp liên quan đến kết nối máy khách này sẽ phát triển. và không bao giờ co lại. Nếu thỉnh thoảng có nhiều khách hàng giao dịch với các đối tượng lớn, đó có thể là một lời giải thích khả thi. Nếu bạn sử dụng các lệnh truy xuất dữ liệu rất lớn từ Redis (trong một lần chụp), thì đó cũng có thể là một lời giải thích. Ví dụ:một lệnh KEYS * đơn giản được áp dụng trên máy chủ Redis lưu trữ hàng triệu khóa sẽ tiêu tốn một lượng bộ nhớ đáng kể.
Bạn đã đề cập rằng bạn có các đối tượng lớn đến 25 MB. Bạn có 404 kết nối máy khách, nếu mỗi người trong số họ cần truy cập các đối tượng như vậy tại một thời điểm, nó sẽ tiêu tốn 10 GB bộ nhớ.