게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
잡담] 왜 메모리 누수에 머리를 썩히는지 이제 알았습니다 ㅋㅋ
게시물ID : programmer_11942짧은주소 복사하기
작성자 : 물어라이코스
추천 : 0
조회수 : 1917회
댓글수 : 15개
등록시간 : 2015/07/07 17:09:13

지금까지 공부하면서 짜본 프로그램들이야...

특별한 목적을 가지고 메모리가 터질때까지 돌아가는 반복문이 아닌이상

실제 작업 시간이 10초를 넘기는 프로그램이 없었는데..

이번에 24시간 돌아가면서 데이터를 크롤링? 해오는 프로그램을 짰습니다.


C언어로,

int 변수를 증가시키며 그 숫자를 넣은 url에서 json 데이터를 받아와서,

정리한 후 mysql에 입력하는...

작업을 반복하는 프로그램 입니다.



제작하면서 10개씩 반복시켜보니 잘 돌아가길래...

10만개로 반복문을 바꾸고 서버에 올리니 100개 정도 돌더니 멈추더라구요

crontab로 돌려서 멈춘건가? 하고 직접 돌려보니..

메모리 사용량이...ㅋ

1초당 0.5%씩 올라가더라구요 ㅎㅎㅎㅎㅎㅎㅎ

말로만 듣던 메모리 누수구나! 하고 소스를 찾아보니..


반복문 안에서 malloc을 계속해서 해주는데

free는 반복문 밖에서 한번만 해주게 되어 있더라구요.

그러니 반복문 안에서는 계속해서 새로운 메모리를..........;;


이걸 반복문 안에서 free 시키도록 바꾸고,

찾아보니 json-c 로 만들어진 json_object 객체도 json_object_put ? 함수로 되돌리기가 되더라구요.

일단 이것도 해주고...

curl 에서 데이터를 받는 부분 역시 처리 후 free !


그럼에도 불구하고....


스크린샷 2015-07-07 17.06.32 - 복사본.png


...

저정도 돌아가니 여전히 메모리 사용량이 ㅠㅠㅠㅠㅠㅠ

알게 모르게 0.1% 씩 계속 오르네요...

또 어딘가에서 메모리가 새고 있다는 거겠죠?? 엉엉... ㅠㅠㅠㅠ

이젠 더이상 의심 해볼만한 건덕지가 없는데...............

혹시 MYSQL *con; <- 얘를 반복문 시작 전에 연결시켜 놓고, 모든 작업이 끝난 후 close 해주고 있는데...

이것도 계속 연결시켜 놓고 있다고 메모리가 저렇게 되는걸까요?

이걸 반복문 안에서 열고 닫고를 넣으면 괜찮아 지려나요? 지금 돌아가고 있는거 끝나면 한번 해봐야겠네요 ㅜㅜ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호