참 오랜만에 글을 올리네요. 안녕하세요 YULL입니다. ^^
지난 초 여름 두명이서 나름대로 아이템을 가지고 다니던 회사를 그만두고 조그맣게 구멍가게를 차렸습니다.
중고물품 검색 서비스를 만드는 것인데 12월초에 오픈해서 현재까지는 그럭저럭 베타서비스가 돌고 있습니다.
저희 솔루션이 검색 서비스이다 보니 데이터 수집, 데이터 가공, 데이터 검색 크게 세가지 정도로 나뉘어져 있습니다.
데이터 가공과 검색 쪽은 그런대로 돌고 있는데, 데이터 수집단에서 언제부턴가 문제가 발생하기 시작했습니다.
중고장터의 물품을 나름대로 많이 수집을 하는 것이 목적이라 여러 장터를 수집하다 보니수집 루틴이
다소 복잡한 부분도 있습니다만, 차근차근 하나씩 만들어가면서 진행을 한 결과 데이터 수집은 그럭저럭 되는데,
얼마전부터인가 수집서버쪽에서 메모리가 늘기 시작하더니 하루정도를 돌리면 메모리를 무려..
800메가를 잡아먹는 현실이 닥치게 되었습니다.
혹시나 하고 이틀을 돌리니 역시나 하고 out of memory가 나면서 프로그램이 잠잠해지더니 팬이 멈추더군요..
원인을 찾기위해 수집서버 소스 외에도 아무런 상관이 없을법한 소스까지도 전부 뒤지면서
대략 2주를 보냈습니다. (덕분에 소스 정리 및 주석처리가 거의 완벽하게 되었습니다;;;;)
그나마 불행 중 다행으로 수집서버단은 외부에 노출되지 않는 부분이라, 매일 새벽 서버 정리시간이 되면
자다가 일어나서 ㅠ.ㅠ 프로그램을 껐다가 다시 켜는 아주 원시적인 방법으로(ㅡㅡ;;) 문제를 해결(?)해 왔습니다.
어제도 너무나 당황스런 마음으로, 밤샘작업을 하면서 제가 모르고 넘어가거나 델파이 문법 자체를 잘못 쓴것은
아닌가 하고 뜬눈으로 밤을 지샜습니다.. (현재 시스템은 전부 델파이로 개발이 되어 있습니다.)
점심을 대충 먹고나서, 역시나 메모리의 압박에 마음을 졸이면서 소스 이곳저곳을 뒤지던 중,
문득 어제 본 왕과나 드라마에서 어우동 여사의 "등잔밑이 어두우시군요.." 라는 대사가 불현듯 떠오르더군요.
뭔가 계시를 받은것은 아닐까 하는 유치한 생각에 정말로 간단한 루틴쪽을 다시 들춰 봤습니다.
동적배열을 쓰는 함수가 하나 있습니다.
웹페이지 패턴에 관련된 데이터를 다루는 루틴인데 복잡한 페이지일 경우 패턴 사이즈가 제법 됩니다만,
루틴 자체는 간단한 편이라 별로 신경을 안썼는데 아뭏튼, 그 배열변수를 쫓아서 함수의 맨끝까지 가보니..
다 쓰고 초기화를 안했더군요 ㅡㅡ;;;
눈이 번쩍 뜨이면서 변수 := nil; 요 문구 하나를 집어넣고 재컴파일하고 전체 장터를 시뮬레이션 해본 결과..
10메가 ~ 15메가를 유지하고 있습니다. 대략 10분정도 참으로 허탈했습니다;;;;
무식하면 수족이 고생한다는 말을 모.. 처음 겪는건 아니지만..
전체 시스템에서 동적배열 쓰는 부분이 저 부분 딱 하나랍니다. 아하하하 ㅡㅡ;;;;
휴.. 이렇게 해서 메모리 문제는 해결을 하게 되었습니다. 쿡..
꺼진불도 다시 보기전에 불 끌때 확실~하게 끄라는 모 선배님의 말씀을 떠올리면서..
이제 또 다른 문제들을 해결하기 위해 좀 자구 와야겠습니다.. 졸리네요. 쩝..
오늘 선거 잘 하시구요, 연말 송년회때 뵙겠습니다.
|
단, HeapAlloc쓰고 있는 부분 있으면 전부 malloc계열로 바꿔놓구 테스트... HeapAlloc은 안잡아주더구만