Bộ nhớ bị giải phóng đột ngột mỗi ngày vào cùng một thời điểm


10

Tôi có một vài máy ảo trên Windows Azure chạy trang web thương mại điện tử của chúng tôi và gần đây chúng tôi đã bắt đầu sử dụng Telegraf, InfluxDb và Grafana để theo dõi các máy này. Sau một vài tuần để thu thập dữ liệu, tôi đã nhận thấy một mô hình kỳ lạ liên quan đến bộ nhớ sẵn số liệu:

Mỗi ngày hầu như luôn luôn vào cùng một thời điểm trong ngày, tôi đã nhận thấy rằng có một lượng bộ nhớ đột ngột được giải phóng, do kỹ năng DevOp rất rất hạn chế của tôi, tôi không thể tìm ra điều gì gây ra điều này.

Dưới đây là biểu đồ hiển thị mẫu này:

Mẫu lẻ

Câu hỏi của tôi là: Điều gì có thể dẫn đến một cái gì đó như thế này? Tôi cảm thấy bị nghi ngờ rằng Leak Memory là đáng trách nhưng ... Bộ nhớ miễn phí không bao giờ giảm xuống dưới 70% và chỉ xảy ra ở hai trong số các VM có lưu lượng truy cập nhiều nhất!

Tôi có nên quan tâm khi tôi thấy một cái gì đó như thế này?

PS: Tôi đã thu thập các số liệu cho Private e Virtual byte cho từng dịch vụ windows chúng tôi đang chạy và cho quy trình w3wp ... mặc dù tôi đã đọc rằng số liệu này không đáng tin cậy để tìm hiểu xem bạn có bị rò rỉ bộ nhớ không, nhưng ít nhất tôi sẽ cố gắng để có được một số xu hướng và xem liệu nó có tương quan với mô hình được hiển thị ở trên không.


2
Bạn đang thấy một trình thu gom rác thông thường hoặc dọn dẹp bộ đệm IMHO. Trong ngôn ngữ của bạn là trang web của bạn được thực hiện? (đây có thể là ứng dụng của bạn, trình duyệt web của bạn và thậm chí cả hệ thống đang thực hiện một số thao tác dọn dẹp)
Tensibai

Đó cũng là điều mà tôi đã nghi ngờ ... Nó được thực hiện trong ASP.NET MVC 4, vì vậy lý thuyết thu gom rác có ý nghĩa. Ngoài ra, trên một lưu ý phụ, các số liệu tôi đã thu thập được về quy trình w3wp và dịch vụ windows trông hoàn toàn bình thường.
António Sérgio Simões

Tôi gần như không biết gì về ASP, nhưng tôi giả sử có cách biểu đồ mức tiêu thụ bộ nhớ và bộ sưu tập rác như trong java, điều này sẽ giúp đảm bảo đây là nguyên nhân gốc.
Tensibai

Câu trả lời:


7

Tôi đã thấy mẫu "răng cưa" này trong các hệ thống khác, đặc biệt là một công cụ dữ liệu dựa trên Java. Dựa trên mô tả của bạn, tôi nghĩ rằng bạn đang xem bộ sưu tập rác .NET (giả sử đây là ứng dụng .NET.) Java và .NET đều là các ngôn ngữ và khung công tác được quản lý bộ nhớ sử dụng bộ sưu tập rác.

Một rò rỉ bộ nhớ thường được tìm thấy trong các khuôn khổ mà thiếu quản lý bộ nhớ, hoặc trong một chương trình trên một khuôn khổ bộ nhớ được quản lý được trọng hoặc gây nhầm lẫn thu gom rác thải.

Thực tế là đây là những máy chủ có lưu lượng truy cập cao nhất của bạn có ý nghĩa. Bạn đang thấy .NET framework phân bổ bộ nhớ khi cần thiết, sau đó trình thu gom rác khởi động theo chu kỳ thông thường và lấy lại bộ nhớ không sử dụng bằng thuật toán thu gom rác. Trừ khi bạn theo dõi các vấn đề hiệu suất cụ thể, tôi không nghĩ rằng mô hình sử dụng bộ nhớ này là một vấn đề.


Nó thực sự là một ứng dụng .NET và từ nghiên cứu của tôi trong vài ngày qua, nó rất có ý nghĩa với những gì bạn và @Tensibai đã viết.
António Sérgio Simões

7

Tôi nghĩ rằng đã tìm ra lý do tại sao biểu đồ này trông như thế này.

Tôi cũng đang thu thập các số liệu cho bộ đếm hiệu suất / lỗi tổng số ứng dụng ASP.NET và tôi nhận thấy rằng chính xác cùng lúc xảy ra hiện tượng tăng bộ nhớ có sẵn, số liệu Tổng lỗi được đặt lại về 0.

Theo msd, bộ đếm này đặt lại về 0 mỗi khi xảy ra khởi động / tắt ứng dụng.

Điều này khiến tôi tin rằng nguyên nhân của mẫu răng cưa Bộ nhớ này là do ứng dụng khởi động lại xảy ra.

Đây là cách biểu đồ của tôi trông như thế nào:

Lỗi Tổng số ứng dụng ASP.NET Tăng trí nhớ

CẬP NHẬT

Điều này xảy ra vì các byte riêng của quy trình W3WP đạt giới hạn cho một lần tái chế (Chúng tôi có giới hạn byte riêng được định cấu hình trong nhóm ứng dụng). Và nhìn kỹ vào biểu đồ Private Byte, chúng ta có thể thấy điều gì đó bất thường đang xảy ra vì việc sử dụng Bộ nhớ tăng vọt từ 650MB lên 3,2 GB và vài giờ sau đó nhảy vọt từ 3,6 GB lên 16,6 GB! Đây là khi tái chế xảy ra.


2
Đây là lời giải thích hợp lý hơn nhiều. Giải phóng bộ nhớ đột ngột xảy ra gần như độc quyền với quá trình khởi động lại. Các cơ chế giải phóng bộ nhớ của các tiến trình đang chạy không bao giờ sắc nét và hiếm khi thực sự giải phóng bộ nhớ hơn là giải phóng một số không gian trên đống phân bổ.
Jiri Klouda
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.