<div><br></div>지금까지 공부하면서 짜본 프로그램들이야... <div><br></div> <div>특별한 목적을 가지고 메모리가 터질때까지 돌아가는 반복문이 아닌이상</div> <div><br></div> <div>실제 작업 시간이 10초를 넘기는 프로그램이 없었는데..</div> <div><br></div> <div>이번에 24시간 돌아가면서 데이터를 크롤링? 해오는 프로그램을 짰습니다.</div> <div><br></div> <div><br></div> <div>C언어로,</div> <div><br></div> <div>int 변수를 증가시키며 그 숫자를 넣은 url에서 json 데이터를 받아와서,</div> <div><br></div> <div>정리한 후 mysql에 입력하는...</div> <div><br></div> <div>작업을 반복하는 프로그램 입니다.</div> <div><br></div> <div><br></div> <div><br></div> <div>제작하면서 10개씩 반복시켜보니 잘 돌아가길래...</div> <div><br></div> <div>10만개로 반복문을 바꾸고 서버에 올리니 100개 정도 돌더니 멈추더라구요</div> <div><br></div> <div>crontab로 돌려서 멈춘건가? 하고 직접 돌려보니..</div> <div><br></div> <div>메모리 사용량이...ㅋ</div> <div><br></div> <div>1초당 0.5%씩 올라가더라구요 ㅎㅎㅎㅎㅎㅎㅎ</div> <div><br></div> <div>말로만 듣던 메모리 누수구나! 하고 소스를 찾아보니..</div> <div><br></div> <div><br></div> <div>반복문 안에서 malloc을 계속해서 해주는데</div> <div><br></div> <div>free는 반복문 밖에서 한번만 해주게 되어 있더라구요.</div> <div><br></div> <div>그러니 반복문 안에서는 계속해서 새로운 메모리를..........;;</div> <div><br></div> <div><br></div> <div>이걸 반복문 안에서 free 시키도록 바꾸고,</div> <div><br></div> <div>찾아보니 json-c 로 만들어진 json_object 객체도 json_object_put ? 함수로 되돌리기가 되더라구요.</div> <div><br></div> <div>일단 이것도 해주고...</div> <div><br></div> <div><span style="font-size:9pt;line-height:1.5;">curl 에서 데이터를 받는 부분 역시 처리 후 free !</span></div> <div><span style="font-size:9pt;line-height:1.5;"><br></span></div> <div><br></div> <div>그럼에도 불구하고....</div> <div><br></div> <div><br></div> <div> <div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201507/1436256743uoqZV7eijODTi1lG4Xq8Hz46Q.png" width="637" height="624" alt="스크린샷 2015-07-07 17.06.32 - 복사본.png" style="border:none;"></div><br></div> <div><br></div> <div>...</div> <div><br></div> <div>저정도 돌아가니 여전히 메모리 사용량이 ㅠㅠㅠㅠㅠㅠ</div> <div><br></div> <div>알게 모르게 0.1% 씩 계속 오르네요...</div> <div><br></div> <div>또 어딘가에서 메모리가 새고 있다는 거겠죠?? 엉엉... ㅠㅠㅠㅠ</div> <div><br></div> <div>이젠 더이상 의심 해볼만한 건덕지가 없는데...............</div> <div><br></div> <div>혹시 MYSQL *con; <- 얘를 반복문 시작 전에 연결시켜 놓고, 모든 작업이 끝난 후 close 해주고 있는데...</div> <div><br></div> <div>이것도 계속 연결시켜 놓고 있다고 메모리가 저렇게 되는걸까요?</div> <div><br></div> <div>이걸 반복문 안에서 열고 닫고를 넣으면 괜찮아 지려나요? 지금 돌아가고 있는거 끝나면 한번 해봐야겠네요 ㅜㅜ</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.