메모리 누수 프로그램
메모리 누수는 반복적으로 메모리를 할당하고 사용 후 사용 가능하게 해제하지 않는 일로 이루어진 프로그램 오류입니다.
대화식 애플리케이션 같은 장기 실행 프로그램에서 메모리 누수는 심각한 문제입니다. 실제 메모리와 페이지 공간에 대부분 가비지로 채워진 페이지가 대량으로 누적되고 메모리 프래그먼트화가 발생할 수 있기 때문입니다. 하나의 프로그램에서 메모리가 누수되면 시스템에 페이지 공간이 부족해집니다.
svmon 명령을 사용해 작업 세그먼트가 지속적으로 증가하는 프로세스를 찾아 메모리 누수를 발견할 수 있습니다. mbuf 누수나 장치 드라이버, 커널 확장 또는 커널로 인해 커널 세그먼트에서 누수가 발생할 수 있습니다. 세그먼트가 늘어나고 있는지 판별하려면 -i 옵션을 지정한 svmon 명령을 사용해 프로세스 또는 프로세스 그룹을 살펴보고 계속 증가하는 세그먼트가 있는지 확인하십시오.
문제가 되는 서브루틴 또는 코드 행을 식별하는 일은 어려우며 특히 대량의 malloc() 호출과 free() 호출을 생성하는 AIXwindows 애플리케이션에서 더 어렵습니다. C++에서는 메모리 사용량과 누수를 분석/조정하는 데 사용할 HeapView Debugger를 제공합니다. 메모리 누수를 분석할 몇몇 써드 파티 프로그램이 있지만 이를 사용하려면 프로그램 소스 코드에 액세스해야 합니다.
realloc() 서브루틴을 사용해 실제로 프로그래밍 오류는 아니지만 메모리 누수와 동일한 효과를 가져올 수 있습니다. 프로그램에서 realloc() 서브루틴을 자주 사용해 데이터 영역의 크기가 증가하는 경우 realloc() 서브루틴에서 해제한 스토리지를 재사용할 수 없으면 프로세스의 작업 세그먼트가 계속 프래그먼트화될 수 있습니다.
# svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8535 2178 847 8533 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2357 2 0 2357
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
ginger :svmon -P 13548 -i 1 3
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8589 2178 847 8587 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2411 2 0 2411
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -
Pid Command Inuse Pin Pgsp Virtual 64-bit Mthrd LPage
13548 pacman 8599 2178 847 8597 N N N
Vsid Esid Type Description LPage Inuse Pin Pgsp Virtual
0 0 work kernel seg - 4375 2176 847 4375
48412 2 work process private - 2421 2 0 2421
6c01b d work shared library text - 1790 0 0 1790
4c413 f work shared library data - 11 0 0 11
3040c 1 pers code,/dev/prodlv:4097 - 2 0 - -