프로그램을 테스트 중인데 프로세스에서 사용하는 최대 메모리를 확인해야 합니다. 나는 일반적으로 이것이
ps -aux
나에게 이 정보를 제공할 수 있다는 것을 알고 있지만 프로세스는 1/10초 미만으로 실행되므로 ps 캡처를 허용하는 것은 좋은 옵션이 아닙니다.
이런 종류의 정보를 얻을 수 있는 다른 좋은 옵션이 있습니까? 메모리 사용량을 향상시킬 수 있는지 확인하기 위해 프로그램에서 몇 가지 벤치마크를 실행하고 있습니다.
답변1
valgrind
메모리 사용량에 대한 다른 많은 통계와 함께 이 정보를 제공합니다(그리고 메모리 누수 등에 대해 알려줍니다). 프로그램 속도가 약간 느려지지만 프로세스의 수명이 짧기 때문에 문제가 되지 않습니다.
다음은 실행의 샘플 출력입니다 ls
.
==7051==
==7051== HEAP SUMMARY:
==7051== in use at exit: 351,689 bytes in 838 blocks
==7051== total heap usage: 1,049 allocs, 211 frees, 688,325 bytes allocated
==7051==
==7051== LEAK SUMMARY:
==7051== definitely lost: 0 bytes in 0 blocks
==7051== indirectly lost: 0 bytes in 0 blocks
==7051== possibly lost: 0 bytes in 0 blocks
==7051== still reachable: 351,689 bytes in 838 blocks
==7051== suppressed: 0 bytes in 0 blocks
==7051== Rerun with --leak-check=full to see details of leaked memory
==7051==
==7051== For counts of detected and suppressed errors, rerun with: -v
==7051== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
찾고 있는 특정 정보는 "총 힙 사용량" 줄에서 제공됩니다.
답변2
사용GNU 시간(Bash에 내장된 "시간"보다 더 많은 기능을 가지고 있습니다):
$ sudo apt-get install time
$ \time prog >/dev/null
0.00user 0.00system 0:00.00elapsed 0%CPU (0avgtext+0avgdata 2380maxresident)k
0inputs+0outputs (0major+119minor)pagefaults 0swaps
\time
명시적 쿼리 탈출아니요내장된 것을 사용할 /usr/bin/time
수도 있습니다 . 그 밖에도 다양한 표시 방법이 있으므로 "맨타임"을 이용하시기 바랍니다.
답변3
이것은 오래된 스레드이지만 단기 실행 프로세스의 메모리 요구 사항도 확인해야 할 때 우연히 발견했습니다.
몇 가지 조사를 했는데 허용된 답변이 올바른 것 같지 않습니다. OP와 나는 언제든지 프로그램에서 사용하는 최대 메모리 양, 즉 최대 메모리 요구 사항을 찾으려고 노력하고 있습니다.
valgrind의 메트릭은 total heap usage
이를 측정하지 않지만 실행 중 모든 할당의 합계를 측정합니다. 따라서 루프가 100회 반복에 대해 1MB를 할당하고 해제하는 경우 total heap usage
최대 메모리 요구 사항이 1MB에 불과하더라도 메트릭에 100MB가 기여하게 됩니다.
Valgrind에는 Massif-Visualizer 도구를 사용하여 시각화할 수 있는 프로그램의 최대 메모리 요구 사항을 찾는 데 사용할 수 있는 Massif라는 도구가 포함되어 있습니다.
valgrind --tool=massif ./<your program>
massif-visualizer massif.out.<num>
이 도구는 시간 경과에 따른 총 힙 사용량을 표시하고 프로그램에 대한 올바른 최대 힙 요구 사항을 결정합니다. 이 프로세스는 다음에 설명되어 있습니다.자세한 내용은 여기.