Tại sao Linux lọc bộ nhớ cache khi gần đầy?


14

Dưới đây là biểu đồ bộ nhớ trông giống như trên VPS chạy CentOS với 512MB RAM và nginx / php-fpm / mysqld phục vụ (chủ yếu là tĩnh) cho vài nghìn khách truy cập mỗi ngày.

Biểu đồ bộ nhớ hàng tuần

(đó là những ngày trên trục x)

Như bạn có thể thấy, nó khá lộn xộn trong vùng đệm và vùng đệm. Bộ nhớ cache được xóa trong các khoảng thời gian không đều (loại trừ một công việc định kỳ có trách nhiệm). Nó thường, nhưng không phải luôn luôn, thanh trừng tại điểm mà nó có thể phát triển không lớn hơn. Đôi khi nó xóa gần như hoàn toàn, đôi khi chỉ là nửa chừng.

Tôi đang cố gắng để hiểu logic đằng sau những cuộc thanh trừng này. Tôi hy vọng dữ liệu tệp sẽ được lưu trữ lâu hơn nhiều và không thấy bất kỳ chương trình nào khác sử dụng nhiều bộ nhớ hơn bình thường khi bộ nhớ cache bị xóa.

Đây có phải là hành vi bình thường, hoặc tôi đang thiếu một cái gì đó?

CẬP NHẬT: Nâng cấp bộ nhớ dường như đã ổn định đồ thị. Vẫn thấy những giọt nhỏ, nhưng không nơi nào đáng kể như trước khi nâng cấp.

Sau khi nâng cấp bộ nhớ


Đây có phải là thùng chứa OpenVZ / Virtuozzo hoặc VM thực như XEN hoặc KVM không?
jordanm

1
Không thể giải thích chúng là gì, nhưng tôi có một VPS hiển thị hành vi tương tự. dl.dropbox.com/u/1578899/memory-week.png
EightBitTony

@jordanm Đó là một máy ảo dựa trên Xen.
đốt cháy

@EightBitTony Cảm ơn bạn đã chia sẻ. Bạn trông có vẻ hơi 'tự nhiên' hơn một chút, nhưng tôi thấy rõ một kiểu giọt tương tự (nhưng có lẽ dễ đoán hơn) trong bộ nhớ cache.
đốt cháy

Tôi đã tự hỏi nếu Munin 2 đang vẽ đồ thị / thu thập dữ liệu đủ khác nhau để dẫn đến một số khác biệt (đồ thị mượt mà hơn của bạn), nhưng ngay cả của tôi cũng cho thấy sự sụt giảm ở giữa chu kỳ thay vì hàng ngày. Đó là số lẻ, chắc chắn.
EightBitTony

Câu trả lời:


3

Có thể là rất nhiều thứ. Có thể một trong những chương trình bạn đang chạy thỉnh thoảng và sử dụng nhiều RAM. Nếu đó thực sự là vài tuần trên trục x, bạn nên lấy mẫu ở độ phân giải cao hơn nhiều (ví dụ một lần mỗi phút hoặc thậm chí giây) để có thêm thông tin về những gì đang xảy ra khiến bộ đệm bị xóa. pstopđầu ra (bao gồm cả tải trung bình) trong thời gian đó cũng sẽ hữu ích.


Vâng, tôi đoán rằng chúng ta có thể đưa ra giả thuyết rằng việc sử dụng bộ nhớ đột ngột rất ngắn, xảy ra trong một phút hoặc lâu hơn, và không được phát hiện bởi Munin có thể làm đổ bộ đệm, tất nhiên, được phát hiện vì nó vẫn tồn tại.
EightBitTony

Tiêu đề hơi khó hiểu, vì nó thực sự hiển thị một tuần dữ liệu, vì vậy đó là những ngày trên x-as, không phải tuần. Đối với tần suất bỏ phiếu: Munin lấy dữ liệu cứ sau 5 phút và tôi không nghĩ tần số đó có thể bị thay đổi. Tôi chỉ chạy nginx, mysql, php-fpm và nút munin. Nó có thể có bất cứ điều gì để làm với bộ đệm mysql, có lẽ?
đốt cháy

Tôi đã có đầu (được sắp xếp theo mức sử dụng bộ nhớ) ghi đầu ra của nó vào một tệp cứ sau 5 giây, sau đó tôi đã phân tích tệp đó và không tìm thấy quá trình nào cho thấy bất kỳ hành vi bất thường nào tại điểm mà bộ nhớ được lưu trữ đột ngột giảm xuống. Trừ khi một quá trình có thể sử dụng nhiều bộ nhớ này và vẫn thoát khỏi cửa sổ 5 giây đó, tôi không tin rằng đây có thể là nguyên nhân. Nhưng nếu không có quá trình chạy amok, nó có thể là gì?
đốt cháy

Chủ đề này hơi cũ, nhưng quan sát nhanh về phương pháp: bao nhiêu quá trình đóng góp vào bộ nhớ cache của bộ nhớ hệ thống sẽ không (dễ dàng) được phản ánh ở trên , vì một quy trình rất tích cực có thể chồng chất vào bộ đệm rất nhanh mà không cần chính nó bộ nhớ được phân bổ tăng nhiều. Ví dụ: đọc một tệp rất lớn trong các đoạn nhỏ để truyền - trong khi quá trình có thể không bao giờ sử dụng nhiều hơn một vài MB được phân bổ , vài MB đó sẽ liên tục thay đổi và tích lũy các tham chiếu trong bộ đệm. Vì vậy, điều cần xem xét ở đầu ra hàng đầu sẽ là sự tích lũy đột ngột của thời gian CPU.
goldilocks

Bạn cũng có thể quan tâm đến điều này: cognitiveissonance.ca/cogware/plog
goldilocks

2

Một lý do có thể là một tệp đang phát triển, như một bản ghi nhật ký, bị xóa, nén hoặc gửi đi nơi khác khi nó đạt đến một kích thước nhất định.

Trong cả hai trường hợp, kích thước bộ nhớ cache của nó, có thể là toàn bộ nếu không có áp suất bộ nhớ trong HĐH của bạn, sẽ được giải phóng khỏi bộ đệm ngay khi tệp gốc bị xóa.


Một ý tưởng thú vị, nhưng các tệp nhật ký hoạt động mạnh nhất hiếm khi vượt quá kích thước tệp 25MB trước khi chúng được xoay và việc sử dụng bộ đệm / bộ đệm có xu hướng giảm khoảng 200 MB.
đốt cháy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.