티스토리 뷰

728x90
반응형

AIX memory leak 추적 방법


# 테스트 환경

OS : AIX
Database : 해당없음 
Description
- MALLOCDEBUG 를 사용 
- 프로세스 종료시 반환되지 않는 힙메모리 정보를 STDERR 로 출력함 
- AIX 5.3 에서 제공하는 기능임 


# 환경구성
* Tmax 서버만 환경변수 적용을 시키기 위해 SVRGROUP 절의 ENVFILE 을 이용   
*SVRGROUP
svg1            NODENAME = “ibmtest”, ENVFILE=”/home/sangwhee/test.env


test.env 에 다음 환경변수 설정 
MALLOCTYPE=debug 
MALLOCDEBUG=report_allocations 


* stderr 로 로그가 출력되므로 CLOPT 절에 -e 설정
 *SERVER
svrleak            SVGNAME = svg1, CLOPT = “-o $(SVR).out -e $(SVR).out”


 * svrleak 서버 구성
- svrleak 의 서비스 TOUPPER 는 leakm 함수를 call  
- leakm 함수는 10000 byte 씩 malloc 수행 – svrleak 컴파일시 -g 옵션 추가 (추가하지 않으면 함수 명이 ??로 나옴)

#include 
#include <usrinc/atmi.h>
void leakm(void);

TOUPPER(TPSVCINFO *msg)
{
        int             i;
        printf(“TOUPPER service is started!\n”);
        printf(“INPUT : data=%s\n”, msg->data);
        for (i = 0; i < msg->len; i++)
                msg->data[i] = toupper(msg->data[i]);
        printf(“OUTPUT: data=%s\n”, msg->data);
        leakm();
        tpreturn(TPSUCCESS,0,(char *)msg->data, 0,0);
}

void leakm(void)
{
char *buf;
buf = (char *)malloc(10000);
free(buf);
}


# 테스트 결과 
* TOUPPER 서비스 여러번 호출 
* tmdown -S svrleak 수행시 svrleak.out 으로 trace 로그 출력 …

Allocation #16: 0x1100508F0
        Allocation size: 0×2710                         =====> 10000 byte
        Allocation traceback:
        0x090000000019309C  malloc
        0x00000001000007B4  leakm
        0×0000000100000728  TOUPPER
        0x0900000003ED41B4  ??                     =====> -g 옵션 없는 모듈은 함수명이 안나옴 

Total allocations: 18.
* TOUPPER > leakm 까지 추적 가능

728x90
반응형