Facebook phát hành mã nguồn của memlab

facebook-memlab

MemLab là một khuôn khổ để tìm kiếm các rò rỉ bộ nhớ JavaScript

Gần đây tin tức đã phá vỡ rằng Facebook đã đưa ra quyết định phát hành mã nguồn của bộ công cụ phòng thí nghiệm, đó là được thiết kế để phân tích các phần của trạng thái bộ nhớ phân bổ động (heap), xác định chiến lược để tối ưu hóa công việc với bộ nhớ và phát hiện rò rỉ bộ nhớ xảy ra khi thực thi mã JavaScript. 

Khuôn khổ được tạo ra để phân tích nguyên nhân của việc tiêu thụ nhiều bộ nhớ khi làm việc với các trang web và ứng dụng web. Ví dụ: memlab được sử dụng để phân tích mức tiêu thụ bộ nhớ khi sử dụng phiên bản mới của trang Facebook.com, phiên bản này đã tiết lộ các rò rỉ gây ra sự cố trình duyệt phía máy khách do hết bộ nhớ trống.

Những người sử dụng các ứng dụng web của chúng tôi thường sẽ nhận thấy các vấn đề về hiệu suất và các bản sửa lỗi chức năng ngay lập tức. Tuy nhiên, mất trí nhớ lại là một câu chuyện khác. Nó không đáng chú ý ngay lập tức, bởi vì nó tiêu thụ một phần bộ nhớ tại một thời điểm, ảnh hưởng đến toàn bộ phiên web và làm cho các tương tác tiếp theo chậm hơn và kém phản hồi hơn.

Để giúp các nhà phát triển của chúng tôi giải quyết vấn đề này, chúng tôi đã tạo MemLab, một khung kiểm tra bộ nhớ JavaScript giúp tự động phát hiện rò rỉ và giúp dễ dàng xác định vị trí rò rỉ bộ nhớ. Chúng tôi đã sử dụng MemLab trên Meta để ngăn chặn thành công sự tăng trưởng bộ nhớ không bền vững và xác định các lỗi rò rỉ bộ nhớ và các cơ hội tối ưu hóa bộ nhớ trong các sản phẩm và cơ sở hạ tầng của chúng tôi.

Việc sử dụng nhiều bộ nhớ có tác động tiêu cực và đáng kể về mặt thống kê đối với tải trang và hiệu suất tương tác (mất bao lâu để tải một trang hoặc thực hiện một tương tác)
Chỉ số mức độ tương tác của người dùng (người dùng đang hoạt động, thời gian dành cho trang web, số lượng hoạt động đã thực hiện)

Nguyên nhân gây rò rỉ bộ nhớ khi thực thi mã JavaScript có thể là sự hiện diện của các tham chiếu đối tượng ẩn, vậy bộ thu gom rác không thể giải phóng bộ nhớ bị chiếm bởi đối tượng, bộ nhớ đệm giá trị không hợp lý hoặc triển khai cuộn vô hạn mà không loại bỏ các mục danh sách cũ.

Ví dụ: trong mã Chrome sau, rò rỉ bộ nhớ xảy ra do đối tượng "obj", ngay cả khi đối tượng được đặt thành null, vì Chrome giữ các tham chiếu nội bộ đến các đối tượng được hiển thị để cho phép chúng được kiểm tra sau này trong bảng điều khiển web.

Hoạt động cơ bản của Memlab, như sau:

  1. Nó thực hiện phát hiện rò rỉ bộ nhớ trong trình duyệt trước tiên, Memlab cho phép bạn tự động so sánh các ảnh chụp nhanh của bộ nhớ động, phát hiện rò rỉ bộ nhớ và tổng hợp kết quả.
  2. Một API truyền tải heap hướng đối tượng cho phép bạn triển khai các thuật toán phát hiện rò rỉ của riêng mình và triển khai các hệ thống để phân tích cú pháp ảnh chụp nhanh heap. Phân tích cú pháp đống được hỗ trợ cho các trình duyệt dựa trên công cụ Chromium, cũng như cho các nền tảng Node.js, Electron và Hermes.
  3. Giao diện dòng lệnh và API để tìm cơ hội tối ưu hóa việc sử dụng bộ nhớ.
  4. Một hệ thống xác nhận cho Node.js cho phép bạn tạo các bài kiểm tra đơn vị và chạy các chương trình dựa trên Node.js để phân chia trạng thái của riêng bạn, kiểm tra bộ nhớ của bạn hoặc viết các xác nhận nâng cao.
  5. Nhóm theo dõi lưu giữ, MemLab nhóm tất cả các dấu vết lưu lại với nhau và hiển thị một dấu vết cho từng nhóm đối tượng được lọc có chung dấu vết lưu giữ tương tự. Dấu vết cũng bao gồm thông tin gỡ lỗi như các nút thống trị và kích thước được giữ lại.
  6. Bằng cách báo cáo rò rỉ, MemLab có thể được chạy đều đặn trong ngày để nhận được tín hiệu liên tục về sự hồi quy bộ nhớ. Bất kỳ hồi quy mới nào cũng được thêm vào trang tổng quan nội bộ, nơi các dấu vết lưu giữ tổng hợp của tất cả các rò rỉ bộ nhớ được phát hiện được thu thập và phân loại. Các nhà phát triển sau đó có thể nhấp và xem các thuộc tính đối tượng trong dấu vết lưu giữ cho mỗi lần rò rỉ bộ nhớ.

Cuối cùng nếu bạn quan tâm, bạn nên biết rằng mã Memlab là mã nguồn mở theo giấy phép MIT và bạn có thể tìm hiểu thêm về nó Trong liên kết sau đây.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.