2014-02-06 2 views
2

다양한 명령 줄 유틸리티의 메모리 복잡성에 대한 추측을 테스트하고 싶습니다.OSX에서 메모리 사용량 최고 수위를 얻는 방법

내가 메모리 사용량이 pattern의 크기와 file의 크기에 따라 변화하는 방법을보고 싶어요 간단한 예를

grep pattern file 

로 촬영.

시간 복잡도를 들어

, 그때 내 생각이 현실에서 부담 것으로 보인다 있는지 확인하기 위해 다양한 크기의 입력에

time grep pattern file 

를 실행하는 추측을 싶지만, 어떻게 해야할지하지 않습니다 이 기억을 위해.

한 가지 가능성은 작업을 시작하고 주기적으로 메모리 사용량을 샘플링하는 래퍼 스크립트 일 가능성이 있습니다.하지만 이는 실용적이지 않고 월등히 높은 워터 마크를 부여하지 않을 수 있습니다.

나는 time -v을 제안했지만 내 컴퓨터 (OSX에서는 bash를 실행 중)에서 해당 플래그를 사용할 수 없으며이를 지원하는 버전을 어디에서 찾을 수 있는지 알지 못합니다.

리눅스에서도이 정보는 proc 파일 시스템을 통해 사용할 수 있지만 내 상황에서는 사용할 수 없습니다.

dtrace이 적절한 도구 일지 궁금하지만 간단한 샘플 기반 그림이 실제 최고 워터 마크가 아닐 수도 있습니다.

누구나 OSX에서 적절한 도구 나 접근법을 알고 있습니까? 편집

나는이 그냥 잡담과 질문의 주요 추력에서 아마 산만했다 디스크 사용량,의 언급 제거.

답변

2

질문이 흥미 롭습니다. 응용 프로그램 소스 코드가 없으므로, 메모리 사용을 구성하는 것에 대해 몇 가지 가정을해야하기 때문입니다. procfs을 사용하더라도 결과는 오도 된 것입니다. 상주 세트 크기와 전체 가상 주소 공간은 프로그램 텍스트와 같은 관련없는 데이터를 포함하기 때문에과 추정됩니다.

특히 작은 명령의 경우 가능한 모든 소스를 포함해야하지만 개별 할당을 쉽게 추적 할 수 있습니다. malloc() 외에도 프로세스는 힙을 brk()으로 확장하거나 mmap()을 사용하여 익명 메모리를 얻을 수 있습니다.

다음은 malloc()을 추적하는 DTrace 스크립트입니다. 다른 할당 함수를 포함하도록 확장 할 수 있습니다. 그것은 비 - 원자 변수를 사용하기 때문에 멀티 스레드 프로그램에는 적합하지 않습니다. 메모리 할당 자의

bash-3.2# cat hwm.d 
/* find the maximum outstanding allocation provided by malloc() */ 
size_t total, high; 

pid$target::malloc:entry 
{ 
    self->size = arg0; 
} 

pid$target::malloc:return 
/arg1/ 
{ 
    total += self->size; 
    allocation[arg1] = self->size; 
    high = (total > high) ? total : high; 
} 

pid$target::free:entry 
/allocation[arg0]/ 
{ 
    total -= allocation[arg0]; 
    allocation[arg0] = 0; 
} 

END 
{ 
    printf("High water mark was %d bytes.\n", high); 
} 
bash-3.2# dtrace -x evaltime=exec -qs hwm.d -c 'grep maximum hwm.d' 
/* find the maximum outstanding allocation provided by malloc() */ 
High water mark was 62485 bytes. 

bash-3.2# 

훨씬 더 포괄적 인 논의는 this article by Brendan Gregg에 포함되어 있습니다. 그것은 당신의 질문에 대한 내 자신보다 훨씬 더 나은 대답을 제공합니다.특히 memleak.d이라는 스크립트에 대한 링크가 포함되어 있습니다. 할당을위한 시간 소인을 포함하도록 수정하십시오. & 할당 해제. 시간별 출력을 정렬 할 수 있습니다. 그런 다음 부속 스크립트를 예제로 사용하면 perl을 사용하여 현재 미결 총 할당 및 최고 수위를 추적합니다. 이러한 DTrace/perl 조합 이 멀티 스레드 프로세스 추적에 적합합니다.