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
반응형
'서버 > 리눅스' 카테고리의 다른 글
[Linux] errors in crontab file, can't install. 에러 해결 방법 (2) | 2022.07.07 |
---|---|
[Linux] yum install error 해결 (4) | 2022.05.31 |
[Linux] top 옵션 명령 (3) | 2022.05.26 |
[Linux] 실행 중인 프로세스 PID 확인 (2) | 2022.05.24 |
[Linux] json-c 설치 (3) | 2022.05.16 |
댓글