페이스북, memlab 소스코드 공개

페이스북-멤랩

MemLab은 JavaScript 메모리 누수를 찾기 위한 프레임워크입니다.

최근 뉴스는 페이스북, 소스코드 공개 결정 도구 키트의 멤랩, 즉 메모리 상태의 일부를 분석하도록 설계됨 동적으로 할당(힙)하고, 메모리 작업을 최적화하기 위한 전략을 결정하고 다음과 같은 경우 발생하는 메모리 누수를 감지합니다. 자바스크립트 코드 실행. 

프레임 워크 높은 메모리 소비의 원인을 분석하기 위해 만들어졌습니다. 웹 사이트 및 웹 응용 프로그램으로 작업할 때. 예를 들어, memlab은 새 버전의 Facebook.com 사이트를 사용할 때 메모리 소비를 분석하는 데 사용되었습니다. 이 사이트에서는 여유 메모리 소진으로 인해 클라이언트 측 브라우저 충돌을 일으킨 누출이 드러났습니다.

우리 웹 애플리케이션을 사용하는 사람들은 종종 성능 문제와 기능 수정을 즉시 알아차릴 것입니다. 그러나 기억 상실은 다른 이야기입니다. 한 번에 한 덩어리의 메모리를 소비하여 전체 웹 세션에 영향을 미치고 후속 상호 작용을 더 느리고 덜 반응적으로 만들기 때문에 즉시 눈에 띄지 않습니다.

개발자가 이 문제를 해결할 수 있도록 누수 감지를 자동화하고 메모리 누수를 쉽게 찾을 수 있는 JavaScript 메모리 테스트 프레임워크인 MemLab을 만들었습니다. MemLab on Meta를 사용하여 지속 불가능한 메모리 증가를 성공적으로 억제하고 제품 및 인프라에서 메모리 누수 및 메모리 최적화 기회를 식별했습니다.

높은 메모리 사용량은 페이지 로드 및 상호 작용 성능(페이지를 로드하거나 상호 작용을 수행하는 데 걸리는 시간)에 통계적으로 유의미하고 부정적인 영향을 미칩니다.
사용자 참여 측정항목(활성 사용자, 사이트에 머문 시간, 수행된 활동 수)

메모리 누수의 원인 자바스크립트 코드를 실행할 때 숨겨진 개체 참조가 있을 수 있습니다., 그럼 가비지 수집기가 메모리를 해제할 수 없습니다. 객체에 의해 점유되거나, 값의 불합리한 캐싱 또는 오래된 목록 항목을 제거하지 않고 무한 스크롤을 구현합니다.

예를 들어 다음 Chrome 코드에서 "obj" 개체로 인해 메모리 누수가 발생합니다. 이는 null로 설정되어 있어도 Chrome이 렌더링된 개체에 대한 내부 참조를 유지하여 나중에 웹 콘솔에서 검사할 수 있기 때문입니다.

Memlab의 기본 동작, 다음과 같습니다.

  1. 브라우저에서 먼저 메모리 누수 감지를 수행하고 Memlab을 사용하면 동적 메모리 스냅샷을 자동으로 비교하고 메모리 누수를 감지하고 결과를 집계할 수 있습니다.
  2. 고유한 누수 감지 알고리즘을 구현하고 힙 스냅샷을 구문 분석하기 위한 시스템을 구현할 수 있는 객체 지향 힙 탐색 API입니다. 힙 구문 분석은 Chromium 엔진을 기반으로 하는 브라우저와 Node.js, Electron 및 Hermes 플랫폼에서 지원됩니다.
  3. 메모리 사용을 최적화할 수 있는 기회를 찾기 위한 명령줄 인터페이스 및 API.
  4. 단위 테스트를 생성하고 Node.js 기반 프로그램을 실행하여 자체 상태를 분할하고 메모리를 테스트하거나 고급 주장을 작성할 수 있는 Node.js용 주장 시스템입니다.
  5. 보존 추적 그룹화인 MemLab은 모든 보존 추적을 함께 그룹화하고 유사한 보존 추적을 공유하는 필터링된 개체의 각 그룹에 대한 추적을 표시합니다. 추적에는 지배 노드 및 유지 크기와 같은 디버깅 정보도 포함됩니다.
  6. 누출을 보고함으로써 MemLab을 하루 종일 일정한 간격으로 실행하여 메모리 회귀에 대한 지속적인 신호를 얻을 수 있습니다. 모든 새로운 회귀는 감지된 모든 메모리 누수의 풀링된 보존 추적이 수집되고 분류되는 내부 대시보드에 추가됩니다. 그런 다음 개발자는 각 메모리 누수에 대한 보류 추적에서 개체 속성을 클릭하고 볼 수 있습니다.

최종적으로 관심이 있다면, Memlab 코드는 MIT 라이선스에 따라 오픈 소스이며 이에 대해 자세히 알아볼 수 있습니다. 다음 링크에서.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.