필자가 작성한 도구를 실행하는 몇 개의 프로세스가 파이프로 연결되어 있고 valgrind
으로 수집 된 메모리 사용을 측정하고 싶습니다. 지금까지 내가 시도 뭔가 같은 : myProcesses.script
두 번 내 도구 foo
의 동등한를 실행 예를 들어,valgrind로 파이프 된 명령의 메모리 사용량 추적
$ valgrind tool=massif trace-children=yes --peak-inaccuracy=0.5 --pages-as-heap=yes --massif-out-file=myProcesses".%p" myProcesses.script
:
foo | foo > /dev/null
Valgrind의 내가 기대하는이 방법의 수집 메모리 사용을 캡처하지 않는 것 같습니다. 이것을 추적하기 위해 top
을 사용하면 첫 번째 foo
에서 10 %의 메모리 사용을 얻고 myProcesses.script
이 완료되기 전에 두 번째 foo
에서 또 다른 10 %가 수집됩니다. 이것은 측정하고자하는 일종의 두 가지 프로세스의 사용법입니다.
Massif: ms_main.c:1891 (ms_new_mem_brk): Assertion 'VG_IS_PAGE_ALIGNED(len)' failed.
(valgrind
사용) 나 파이프 방식으로 사용하고 명령에 대한 메모리 사용 데이터를 수집 할 수있는 방법이 있나요 : Valgrind의 대신 다음과 같은 오류를 반환? 또는 이러한 측정을 정확하게 자동화하는 데 사용할 수있는 유사한 도구입니까?
폴링하는 동안 top
이 반환하는 숫자는 나에게 손으로 물결처럼 보입니다. 정확하고 반복 가능한 측정을 찾고 있습니다. 다른 도구에 대한 제안 사항이 있으면 환영 할 것입니다.
수정 - valgrind
옵션으로 오타가 수정되었습니다.
EDIT 2 - 어떤 이유로 인해 --pages-as-heap
옵션이 테스트중인 바이너리에 문제가있는 것으로 보입니다. 귀하의 예제가 잘 실행됩니다. 새 페이지는 인라인되지 않은 함수를 입력 할 때마다 만들어집니다 (스택 오버플로 - ㅎ). 우리는 그 수를 산정하려고했지만, 우리가 테스트중인 메모리 사용량의 규모면에서 그다지 중요하지 않습니다. (ls
또는 less
에 함수 호출이없는 것 같습니다.) --pages-as-heap
을 제거하면 테스트가 다시 작동하는 데 도움이됩니다. 큰 도움을 주신 MrGomez에게 감사드립니다.
페이지 정렬 문제는 새 메모리 중단 점이 대용량으로 설정된 경우 페이징 동작이 실패한 것과 분명히 관련이 있습니다. 필자는이 문제를 재현 할 수는 없지만, 시스템에서의 호출과 관련하여'--pages-as-heap = yes'가 이에 책임이 있다고 추측합니다. 디버거에서 이것이 왜 타격을 받는지 확인하는 것이 오류 상황을 탐색하고자 할 때 가장 좋은 방법입니다. (내 대답을 아래 참조하십시오.) – MrGomez