프로세스 트리의 최대 메모리 사용량을 측정하는 방법은 무엇입니까?

프로세스 트리의 최대 메모리 사용량을 측정하는 방법은 무엇입니까?

프로세스 트리란 프로세스와 그것이 어떤 방식으로든 실행되는 모든 것을 의미합니다.

나는 그것을 시도했지만 /usr/bin/time -v완전히 잘못된 것으로 나타났습니다. 예를 들어, npm test14GiB의 여유 RAM과 8GiB의 무료 스왑으로 프로젝트 중 하나를 실행하면 OOM 킬러가 내 애플리케이션(가장 일반적으로 브라우저 및 IDE)을 종료하기 시작합니다. time보고된 바에 따르면 800MiB만 사용했지만 실제 메모리 소비량은 20GiB 이상으로 매우 높아야 합니다.

답변1

먼저 개요 를 작성하는 데 사용할 smem수 있는 .smem -tas uss

  • -t...전체 표시
  • -a...열 너비 자동 조정
  • -s uss...다음을 기준으로 결과 정렬항공모함기둥

pmap각 프로세스의 세부 사항을 보려면 스위치를 사용하는 것이 가장 좋습니다 -X. 커널이 제공하는 모든 정보를 얻으려면 -XX일반적으로 이는 과잉입니다.

2초 새로 고침 모니터링 받기PID3120:

watch -n 2 pmap -X 3120

편집 : 실제로 정점에 도달하려면 위 내용은 모니터링에 도움이 되지만 실제 피크를 표시하지는 않습니다. 잊어버렸어요.

저는 개인적으로 valgrindmassif도구를 사용합니다.

valgrind --tool=massif --pages-as-heap=yes --massif-out-file=evolution_massif.out evolution; grep mem_heap_B evolution_massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1

설명하다:

  • --page-as-heap=yes...Massif에게 힙뿐만 아니라 모든 메모리를 차지해야 한다고 지시합니다.
  • --massif-out-file출력 파일구성도구
  • 진화...모니터링해야 하는 애플리케이션

다음 부분은 최대 레코드 수를 찾는 것입니다.

검색 횟수 grep메모리 힙 B발생하다. sed -e문자열을 제거 mem_heap_B하면 숫자 결과만 얻을 수 있습니다. 범용 숫자 정렬로 정렬 sort -g하고 가장 큰 숫자를 가져 tail -n 1와서 정렬된 숫자의 첫 번째 행을 반환합니다.

응용 프로그램이 종료되면 valgrid[B]ytes 단위의 최대 메모리인 숫자가 인쇄됩니다.

메모리 피크 기록 확인

출력 파일 표시진화_massif.outms_print, Massif의 후처리 도구를 사용할 수 있습니다 .

매우 간단합니다:

ms_print evolution_massif.out

출력은 다음과 같아야 합니다(출력의 첫 번째 페이지). 여기서 어떤 스냅샷이 최고인지 확인할 수 있습니다.10(피크):

--------------------------------------------------------------------------------
Command:            evolution
Massif arguments:   --pages-as-heap=yes --massif-out-file=massif.out
ms_print arguments: massif.out
--------------------------------------------------------------------------------


    GB
10.09^        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #                                                               
     |        #      @:::::@::::::::::::::::@@:::::@:::::@::::::@::::@:::::@::
     |        #      @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::::@:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |        #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |     @  #::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
     |  :::@::#::::: @:::::@: :::::::: :::: @@:::::@:::::@::::::@::::@:::::@::
   0 +----------------------------------------------------------------------->Gi
     0                                                                   8.927

Number of snapshots: 97
 Detailed snapshots: [7, 10 (peak), 17, 24, 43, 44, 50, 60, 70, 80, 90]

--------------------------------------------------------------------------------
  n        time(i)         total(B)   useful-heap(B) extra-heap(B)    stacks(B)
--------------------------------------------------------------------------------
  0              0           16,384           16,384             0            0
  1    149,772,704      393,547,776      393,547,776             0            0
  2    243,902,287      398,592,800      398,592,800             0            0
  3    396,613,298      558,157,704      558,157,704             0            0
  4    504,752,503      638,138,760      638,138,760             0            0
  5    604,812,936      639,894,808      639,894,808             0            0
...

모든 자녀를 추가하려면 수정하세요.:

모든 하위 항목(자식)을 추가하려면 명령 --trace-children=yes에 이 옵션을 추가 하면 됩니다 .valgrind

관련 정보