2013-05-02 5 views
2

30 개의 응용 프로그램이 실행되는 꽤 복잡한 시스템이 있습니다. 아주 복잡한 C++ 응용 프로그램 중 하나가 메모리를 유출하고 있었고 문제가 해결되었다고 생각합니다. 내가 지금까지했던 어떤응용 프로그램에서 메모리 누수를 감지하는 방법은 무엇입니까?

은 다음과 같습니다

  • 나는 valgrind's memcheck를 사용하여 응용 프로그램을 실행, 그것은 아무런 문제가 발견되지.
  • 나는 htop를 사용하여 응용 프로그램을 모니터링, 나는 가상 잔류 메모리가 나는 그것이 새로운 메모리를 사용하는 경우 valgrind's massif를 실행하고보고 기획하고
  • 증가하지 않는 것으로 나타났습니다

질문은, 어떻게 내가 할 수있는 누출이 없는지 확인하십시오. 나는 가상 메모리가 증가하지 않으면, 누수가없는 것을 확신 할 수 있다고 생각했다. 응용 프로그램을 테스트 할 때 메모리가 할당되고 할당 해제 된 루프를 트리거하여 여러 번 확인합니다.

답변

0

응용 프로그램이 새 메모리를 할당하는 모든 조건을 정확히 알기는 어렵습니다. 이러한 모든 조건을 유도 할 수없는 경우 valgrind와 htop은 모든 상황에서 응용 프로그램이 메모리를 유실하지 않도록 보장하지 않습니다.

아직 정상적인 조건에서 응용 프로그램이 메모리를 유실하지 않도록해야합니다.

+0

응용 프로그램이 메모리를 할당하는 조건을 알고 있으며, 물론 응용 프로그램을 테스트하기 위해 트리거합니다. 문제는 누출이 없는지 확인할 수 있습니까? –

+0

할당 된 메모리가 다시 해제되어야 할 때 (특히 특정 시점 또는 다른 이벤트) 응용 프로그램의 내부 작업 흐름을 알아야합니다. – scai

+0

응용 프로그램의 내부 작업 흐름을 알고 있습니다. 내가 만들었지 :) 또한 단위 테스트와 기능 테스트를 만들었지 만 메모리 누수를 놓치기에는 충분하지 않았습니다. –

-1

Valgrind라는 도구를 사용해야합니다. Linux 및 Mac OS X 운영 체제 용 메모리 디버깅, 메모리 누수 감지 및 프로파일 링 도구입니다. Valgrind는 Linux 실행 파일 디버깅 및 프로파일 링을위한 유연한 프로그램입니다. 단계를 따르 ..

그냥

실행 Valgrind의 설치 ... 을 ARG1의 ARG2 ./a.out

이제 자세한 메모리 누수 감지기를 켜려면이 명령 줄을 사용하는 방법 : Valgrind의 --leak 검사 = 예 ./a.out ARG1 ARG2 Valgrind의 --leak 검사 = 예/경로 /로는/myapp와의 ARG1 ARG2

또는 또한 로그 파일 설정할 수 있습니다 Valgrind의 --log- file = output.file --leak-check = yes - t OOL = memcheck ./a.out ARG1 ARG2

Valgrind의 누수를보고하지 않는 경우

+0

나는 그것을했지만 valgrind는 누출을보고하지 않았다. –

+2

그는 이미 valgrind를 사용했습니다. – scai

0

은 누수가없는 output.file 당신은 ... 메모리 누수의 오류에 대한 고양이를 로그를 확인하실 수 있습니다 더 이상 액세스 할 수없는 메모리 영역의 감각 (확인한 실행 중에). 이것은 프로그램이 메모리를 할당하지 않고 사용하고 더 이상 사용하지 않을 때 해제하지 않는다는 것을 의미하지는 않습니다 (그러나 여전히 도달 가능합니다). 예를 들어 일반적인 할 일 모음, 새 항목을 위에 놓고 항목을 맨 위에 놓은 다음 다른 항목을 누릅니다. 이전 제품으로 돌아 가지 않으므로 사용 된 메모리가 낭비되지만 기술적으로 누수가 아닙니다.

프로세스로 메모리 사용을 모니터링 할 수 있습니다. 꾸준히 증가하면 에 문제가 발생할 수 있습니다 (선의의 누출 또는 필요없이 커지는 데이터 구조).

이것이 실제로 누르는 것이 아니라면 장기적으로 보면 더 저렴할 것입니다 ...

+0

htop을 사용하여 프로세스별로 메모리 사용을 모니터링합니다. 얼마 후이 특정 프로세스 (VIRT, RES, SHR)의 모든 기억이 안정화되고 더 이상 성장하지 않는 것처럼 보입니다. 정확히 모니터 할 내용을 더 잘 설명 할 수 있습니까? –

+0

@ BЈовић, 메모리 사용량이 안정되면 OK입니다. – vonbrand

관련 문제