2016-07-17 15 views
5

Đây là câu hỏi của tôi cho bạn: Làm thế nào là "mem_fragmentation_rateo" tác động đến hiệu suất trong Redis?Redis: Làm thế nào là "mem_fragmentation_ratio" ảnh hưởng đến hiệu suất?

Tôi đã thực hiện một số điều tra trong stackoverflow và redis.io, nhưng tôi thực sự không thể tìm thấy giải thích rõ ràng về câu hỏi của mình.

Cũng được giải thích trong eBook https://www.datadoghq.com/wp-content/uploads/2013/09/Understanding-the-Top-5-Redis-Performance-Metrics.pdf ở trang # 16, "Chỉ số mem_fragmentation_ratio này cho biết tỷ lệ bộ nhớ được sử dụng như hệ điều hành (used_memory_rss) được xem bởi bộ nhớ Redis (used_memory)." Vì vậy, như được giải thích trong http://redis.io/commands/INFO, "lý tưởng, giá trị used_memory_rss chỉ nên cao hơn một chút so với used_memory. Khi rss >> được sử dụng, một sự khác biệt lớn có nghĩa là có phân mảnh bộ nhớ (nội bộ hoặc bên ngoài), có thể được đánh giá bởi kiểm tra mem_fragmentation_ratio. Khi được sử dụng >> rss, nó có nghĩa là một phần của bộ nhớ Redis đã được hoán đổi bởi hệ điều hành: mong đợi một số độ trễ đáng kể ". Vì vậy, khi chúng ta có "used_memory" cao hơn "used_memory_rss", tác động tiêu cực lên nút Redis là rõ ràng, bởi vì nó có nghĩa là Redis bắt đầu sử dụng Swap, và điều này rõ ràng là không tốt cho hiệu suất.

Nhưng, về một tình huống mà chúng tôi có "used_memory_rss" cao hơn "used_memory" thì sao? Điều này có lẽ có nghĩa là bộ cấp phát bộ nhớ của chúng tôi đã không "lấy lại" một phần bộ nhớ được gán cho Redis trong quá khứ và rằng Redis không còn sử dụng nữa (có thể do tạm thời tăng đột biến). Tuy nhiên, tôi không thể hiểu được điều này có thể tác động tiêu cực đến hiệu suất Redis như thế nào. Tại sao tôi đọc nhiều bài viết trên internet mà mọi người quan tâm đến một "mem_fragmentation_ratio" cao? Cũng trong sách điện tử mà tôi đã đề cập trước đây, họ gợi ý có một "mem_fragmentation_rateo" từ 1 đến 1,5.

Trong trường hợp này, khi chúng tôi có "used_memory_rss" cao hơn, Redis có thực sự bị ảnh hưởng không? Chúng ta có nên mong đợi một sự suy giảm hiệu suất Redis với một "mem_fragmentation_ratio" cao?

Tôi quyết định hỏi bạn câu hỏi này bởi vì tôi thành thật nghĩ rằng, với "mem_fragmentation_ratio" cao, chúng tôi có thể gặp sự cố "chỉ" trong hệ điều hành, "có thể" bị thiếu bộ nhớ: hệ điều hành có thể không cấp phát bộ nhớ mới cho các quy trình mới. Dù sao, nó không ảnh hưởng trực tiếp đến Redis (trừ khi hệ điều hành bắt đầu chậm lại, và vv).

Bạn có thể làm rõ những nghi ngờ của tôi không? Bạn có kinh nghiệm nào khi bạn trải nghiệm "mem_fragmentation_ratio" cao và bạn bắt đầu nhận thấy sự suy giảm hiệu suất của Redis không?

Cảm ơn bạn

Trả lời

0

Tôi không phải là một guru Redis, nhưng từ kinh nghiệm và tài liệu hướng dẫn của tôi, tôi đọc, fragmentation_ratio không ảnh hưởng đến hiệu suất trực tiếp. Nhưng nó làm tăng mức tiêu thụ bộ nhớ. Khi ứng dụng của bạn thêm dữ liệu mới và dữ liệu đó không lấp đầy các mảnh miễn phí trong bộ nhớ (khi các chuỗi dữ liệu mới lớn hơn các đoạn đó), bộ nhớ đó vẫn miễn phí. Và do đó bạn có thể hết bộ nhớ nhanh hơn bạn mong đợi.

Các vấn đề liên quan