본문 바로가기
서버/리눅스

[Linux] 프로세스 메모리 사용률 증가 문제 해결

by 코딩히어로 2022. 5. 26.
728x90

리눅스 관리를 하는 중 특정 프로세스가 계속적으로 이유도 없이

종료되는 문제가 생겨서 원인을 분석하다 보니 해당 프로세스의 메모리 사용률이

계속적으로 증가하고 있었습니다

 

이러한 경우에는 memory 사용률이 계속적으로 증가하다가 결국엔

프로그램적인 문제나 다른 기타 문제 때문이 아니라 메모리 오버에 의해 강제 종료됩니다

 

그럼 프로세스의 어떤부분에서 메모리 누수가 계속 발생하는지 알아볼 필요가 있습니다

제가 문제가 됬던 프로세스는 먼저 mysql을 통해 1초마다 select구문을 실행하는데

바로 이 select query를 해오는 부분이 문제가 되었습니다

 

while(1){
    memset(strQuery,0x00,sizeof(strQuery));
    sprintf(strQuery,"select ... limit 1");
    iStatus = mysql_query(connection,strQuery);

    if(iStatus){
        mysqlResult = mysql_store_result(connection);
        ...
    }
}

 

중점적으로 보아야 될 부분은 mysql_store_result 부분으로

해당 함수를 호출할 때 메모리를 사용하는데 이렇게 사용한 메모리는

반드시 mysql_free_result 함수를 통해서 해제를 해주어야 합니다

 

while(1){
    memset(strQuery,0x00,sizeof(strQuery));
    sprintf(strQuery,"select ... limit 1");
    iStatus = mysql_query(connection,strQuery);

    if(iStatus){
        mysqlResult = mysql_store_result(connection);
        ...
    }
    mysql_free_result(mysqlResult);
}

 

mysql_free_result를 통해서 메모리 해제를 반드시 해주어야 합니다

mysql_query, mysql_store_result, mysql_free_result는 한 쌍이라는 것을 항상 기억하고

프로그램에 적용하시면 mysql 쿼리에 의한 메모리 누수는 방지할 수 있습니다

728x90
반응형

댓글