2014-09-19 13 views
0

내 애플리케이션이 누출되는지 여부를 이해하려고합니다. 내 응용 프로그램을 실행하는 경우valgrind, massif, top 및 pmap 비교

, 나는 정기적으로 pmap를 실행하고 관찰 : 나는 top 실행

mapped: 488256K writeable/private: 90144K shared: 0K 
mapped: 488260K writeable/private: 101912K shared: 0K 
mapped: 488256K writeable/private: 102708K shared: 0K 
mapped: 488260K writeable/private: 105112K shared: 0K 

을 관찰 :

VIRT RES  SHR 
488260 17684 3020 
488256 20060 3032 
488256 22700 3032 
488256 26132 3032 
488256 28772 3032 
488256 31880 3032 

"RES"과의 증가 "를 쓰기/개인이" 내가 누출을 의심하게 만드는 이유. 그러나, 나는 모든 주요 누출을 감지하지 않습니다 valgrind를 실행, 나는 실행을 중단 할 때 나는 일관되게 는 20MB에 도달 할 메모리에 대한 참조 :

==19998== 
==19998== HEAP SUMMARY: 
==19998==  in use at exit: 20,351,513 bytes in 974 blocks 
==19998== total heap usage: 329,404 allocs, 328,430 frees, 34,562,346 bytes allocated 
==19998== 
==19998== LEAK SUMMARY: 
==19998== definitely lost: 63 bytes in 4 blocks 
==19998== indirectly lost: 0 bytes in 0 blocks 
==19998==  possibly lost: 4,679 bytes in 76 blocks 
==19998== still reachable: 20,346,771 bytes in 894 blocks 
==19998==   suppressed: 0 bytes in 0 blocks 
==19998== Rerun with --leak-check=full to see details of leaked memory 
==19998== 
==19998== For counts of detected and suppressed errors, rerun with: -v 
==19998== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0) 

나는 valgrind --tool=massif 실행하고 또한 20MB의 평면 참조 :

massif visualisation

QUESTION : 누군가 valgrind와 massif가 내 프로그램이 20MB 메모리를 일관되게 사용한다고 설명 할 수 있습니까?하지만 top과 pmap을 보면 사용량이 늘어났다고 말할 수 있습니까?

+1

'top '이 증가하는 이유를 이해하려면'valgrind --pages-as-heap = yes'를 사용하여 프로그램에서 메모리 할당을 분석해야합니다. . 왜 증가가 있는지 이해할 것입니다. 'top'은 프로세스의 메모리 소비를 측정하는 방식입니다. http://valgrind.org/docs/manual/ms-manual.html#ms-manual.not- 측정. 그리고'valgrind - pages-as-heap = yes'를 사용하면 이러한 할당이 어디에서 수행되는지 볼 수 있습니다. –

+0

고마워 친구, 그거 최고야. 적어도 지금은 대산 괴를 얻어서 증가를 보일 수 있습니다. 이제 코드에서 어떻게 추적하는지 알아 내야합니다. – jsj

답변

1

위로 가기가 프로세스의 증가를 나타내는 이유를 이해하려면 프로그램의 메모리 할당을 valgrind --pages-as-heap=yes으로 분석해야합니다. 왜 증가가 있는지 이해할 것입니다. 방법은 프로세스의 메모리 소비를 측정하는 방법입니다. http://valgrind.org/docs/manual/ms-manual.html#ms-manual.not-measured. 그리고 valgrind --pages-as-heap=yes을 사용하면 프로그램에서 이러한 할당이 수행 된 위치를 알 수 있습니다.