AliOS 가지 차원 측정 전형적인 사례 연구 - 메모리 누수

전형적인 케이스 차원 계측 분석 1-- 메모리 누수

시스템 동작 동안에, 메모리 누출이 더 일반적이지만, 각 바이트 수십 종종 측정 된 압력의 문제를 재현하기 위해 긴 시간을 필요 누수 유출 더 미묘한 일반 메모리의 현상을 재현하기 어려운 . 이 섹션에서는 문제 밖으로 압력 시험에서 가지고 사례를 제공하며 차원 계측 툴의 사용을 통해, 메모리 누출을 확인 분석.

1. 설명 :

XX 압력 측정 인터넷 488번째 통로를 연결하는 현상 AP 반복 덤프 기계 전력을
**

재현하기위한 2 단계 : 

  1. 기기 인증에 접속되고, 온라인 상태를 유지 (유지 하트)
    B .. 네트워크에서 안정된 연결을 끊기 (AP 오프 전력) 후
    C 0.5 분 전력 회수 AP의 후
    D. 장치 측 판정 온라인 장치가 있는지 로그인

문제 3. 예비 분석

압력 및 라우터 장치의 측정 과정없이 서비스 보낸 동작 사이클 재접속없이 리안 오프이다. 이 부분은 공급 업체 와이파이 드라이버 라이브러리를 호출합니다.
로그보기 문제의 관점에서 시스템 고장이 발생하고, 다음과 같이 존재는, 인쇄에 충분한 메모리의 전형적인되었습니다
(이것은 우리이다 로그인 시스템의 하나의 차원 측정 장치 측의 능력 , 메모리 사용량, 메모리 에러가 발생할 때 쉬운 위치에 대한 모든 출력)
의 image.png


시스템 메모리 풀의 동적 메모리를 mallo 불충분 메모리로 인해, 이러한 현상의 이유는 일반적으로 두 가지 :

  1. A A 큰 메모리 할당의 지속적인 동작 부품 및 해제되지 않았다. 이 상황은 어렵다
  2. 메모리 누수 측정 된 압력의 설명에 따라 측정 된 압력은 슬로우 리크가 발생했습니다 며칠 동안 나타났다.

이 예비 분석, 우리는 시작할 것이다 PC의 차원 측정 도구 , 끝을 구문 분석 장치 로그에 나타납니다 가치있는 정보를 확인할 수 있습니다. 다른 문서에서 설명에 참여하는 차원 측정 장치를 사용합니다. 바로 여기

python  core_dump.py  log   xx.elf

차원 계측 툴은 이전 로그 메모리도 누수시 아래와 같이 통계 시스템 메모리 사용을 인쇄하는 장치의 출력단을 파싱 :
의 image.png

큰 순서 작은 메모리 할당 크기로 배치 된 모든 동적 메모리 할당 시스템 충돌 통계 여기 횟수, 각 행은 메모리 애플리케이션에인가되는 어드레스로부터 애플리케이션의 크기 malloc은 메모리를 포함 크기, 위치 및 한 눈에, 신청자의 코드 등을 포함 할 수있다.

우리는 마지막 줄의 그림에서 보면 특이점을 발견 (즉, 시스템 메모리의 구성 요소의 대부분을 차지하고있다) : 시스템이 여전히 982 타이머가가, 70K + 시스템 메모리를 점유 할 때 , 이것은 확실히 문제입니다!

4. 빠른 반복되는 문제

빠른 위치 버그 문제가 매우 중요한 단계입니다 재현.
압력 측정 과정은 라우터 5 분 간격으로 떨어져있는 바와 같이, 장시간 동안, 우리는이 현상을 재현 테스트 케이스의 구조를 재생하려고. 이전 분석에서, 압력 측정 과정은 와이파이 드라이브 제조업체 만 관련이있다. 우리는이 과정을 시뮬레이션하기 위해 두 개의 공통 인터페이스 발견
 hal_wifi_suspend_station    ---- 라우터 분리 작업을, 기본 공급 업체 연결 해제 와이파이 호출
 netmgr_reconnect_wifi을       ---- 작동 할 수있는 라우터를 연결, 제조업체들은 연결하는 와이파이의 바닥을 호출합니다

우리는 다음과 같이 테스트 케이스 코드가 구축했습니다 :

    while (1) {
        krhino_mm_overview(NULL);  /*重点关注这一行*/
        
        aos_msleep(5000);

        hal_wifi_suspend_station(NULL);

        netmgr_reconnect_wifi();
    }

즉 : 시스템 전원에 필요한 네트워크 초기화, 사이클 5 초 일시 중단 순환 압력 측정을 시작하고 다시 연결 한 후

while 루프의 첫 번째 줄에 있습니다 :

krhino_mm_overview(NULL);

인터페이스는 외부 API 디버깅 인터페이스의 한 차원 측정 , 관련 통계의 인쇄 힙.

이러한 인터페이스는 책 출판과 치수 측정 디버깅 API 인터페이스를 신속하게 문제를 찾을 수 있습니다 자주, 디버그 시간의 중요한 수단입니다
참조 https://yuque.antfin-inc.com/aliosthings/mr5i1t/wupvbn#994230b2

이 인터페이스는 (예를 들어) 아래에 도시되어 인쇄 :

========== Heap Info  ==========
-----------------------------------------------------------
[HEAP]| TotalSz    | FreeSz     | UsedSz     | MinFreeSz  |
      | 0x0004A838 | 0x00047E50 | 0x000029E8 | 0x00047E50 |
-----------------------------------------------------------
[POOL]| PoolSz     | FreeSz     | UsedSz     | BlkSz      |
      | 0x00002000 | 0x00001E00 | 0x00000200 | 0x00000020 |
-----------------------------------------------------------

상부 통계는 두 부분, 힙 POOL 나누어. 힙이 전체 통계입니다 POOL 힙의 일부입니다.

풀 HEAP과 차이가있을 때 사용자가 그

aos_malloc(size)

시간이 크기 미만 32 바이트합니다 (k_config.h 항에 RHINO_CONFIG_MM_BLK_SIZE는 매크로에 의해 지정된) malloc이 메모리의 32 바이트가 POOL에 고정한다 할당이면, 메모리를 할당 달리 힙 메모리의 사용자 정의 된 크기를 할당한다.

HEAP 내용의 의미 :

  • TotalSz, 힙의 전체 크기.
  • FreeSz, 유휴 현재 힙 크기.
  • UsedSz 힙의 전류량, 즉 UsedSz = TotalSz - FreeSz.
  • MinFreeSz, 역사의 최소 여유 힙, 즉 TotalSz - 역사의 MinFreeSz 힙은 최대 사용합니다.

이상이이 정보를 사용할 수 있습니다 때 크게 부족한 메모리 힙의 유휴 문제가 발생할지 여부를 결정합니다.

돌아 가기 질문에, 테스트 케이스 후 실행 그림과 같이 네트워크 연결 후 시스템 메모리 사용량의 출력의 각주기 :
의 image.png

의 image.png

의 image.png

....

5. 위치 문제

가시 기반 메모리 시스템을 정지하고, 각각 연결하면 감소되고 소형화가 고정된다. 연결은 메모리 풀 누수의 결과로, 여유가 없을 때의 경우를 중단하는 것은 더 빨리 발생하거나 나중에 메모리가 부족할 때 이러한 상황은 안정적인 메모리 누수가 발생 제조 업체 WIFI 드라이브가 malloc에 ​​메모리입니다.

초기 로그, 시스템 crach 시간 (그것은 메모리가 부족할 때)에서 982 시스템 타이머가 해제되지 않고있다, 그래서 우리는 타이머의 사용에 초점을 맞 춥니 다. 제조 업체는 (문제가 매우 고통스러운 때마다 한 위치의 원인 인) 소스 코드를 제공하지 않기 때문에, 위 인쇄 디버깅 코드에 직접 추가 할 수 없습니다. 다음과 같이 플러스 인쇄 커널 타이머, 결과는 다음과 같습니다
연결 :
의 image.png

매달다, 중지하다, 뜨게하다:
의 image.png

당신은 연결시 타이머가 다섯 번 만들어 볼 수 있지만 일시 중단 할 때 만 네 번을 삭제 매우 명확 수 있습니다!

여기에 문제를 찾으려면 문제가 명확하게 근본 원인이있다 : 타이머 조금 놓습니다. 제조사에 피드백 한 후, 신속하게 해결.

6. 요약

여기 AliOS 것들 차원 측정 기능의 여러 측면과 함께 :

  1. 종단 도킹 장치 메모리 예외 처리, 첫 충돌 지점 중 인쇄
  2. PC 측 치수 측정 도구는 충돌 로그 해석 장치의 끝, 임계치를 감소
  3. 이 API 인터페이스를 사용하여 치수 측정,이 책은 디버그 도구에서 수행된다.

추천

출처yq.aliyun.com/articles/718916