C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[13615] 등잔밑이 어둡다.. ㅠ.ㅠ
YULL [huiso] 2424 읽음    2007-12-19 15:20
참 오랜만에 글을 올리네요. 안녕하세요 YULL입니다. ^^

지난 초 여름 두명이서 나름대로 아이템을 가지고 다니던 회사를 그만두고 조그맣게 구멍가게를 차렸습니다.
중고물품 검색 서비스를 만드는 것인데 12월초에 오픈해서 현재까지는 그럭저럭 베타서비스가 돌고 있습니다.

저희 솔루션이 검색 서비스이다 보니 데이터 수집, 데이터 가공, 데이터 검색 크게 세가지 정도로 나뉘어져 있습니다.
데이터 가공과 검색 쪽은 그런대로 돌고 있는데, 데이터 수집단에서 언제부턴가 문제가 발생하기 시작했습니다.

중고장터의 물품을 나름대로 많이 수집을 하는 것이 목적이라 여러 장터를 수집하다 보니수집 루틴이
다소 복잡한 부분도 있습니다만, 차근차근 하나씩 만들어가면서 진행을 한 결과 데이터 수집은 그럭저럭 되는데,

얼마전부터인가 수집서버쪽에서 메모리가 늘기 시작하더니 하루정도를 돌리면 메모리를 무려..
800메가를 잡아먹는 현실이 닥치게 되었습니다.
혹시나 하고 이틀을 돌리니 역시나 하고 out of memory가 나면서 프로그램이 잠잠해지더니 팬이 멈추더군요..

원인을 찾기위해 수집서버 소스 외에도 아무런 상관이 없을법한 소스까지도 전부 뒤지면서
대략 2주를 보냈습니다. (덕분에 소스 정리 및 주석처리가 거의 완벽하게 되었습니다;;;;)

그나마 불행 중 다행으로 수집서버단은 외부에 노출되지 않는 부분이라, 매일 새벽 서버 정리시간이 되면
자다가 일어나서 ㅠ.ㅠ 프로그램을 껐다가 다시 켜는 아주 원시적인 방법으로(ㅡㅡ;;) 문제를 해결(?)해 왔습니다.

어제도 너무나 당황스런 마음으로, 밤샘작업을 하면서 제가 모르고 넘어가거나 델파이 문법 자체를 잘못 쓴것은
아닌가 하고 뜬눈으로 밤을 지샜습니다.. (현재 시스템은 전부 델파이로 개발이 되어 있습니다.)

점심을 대충 먹고나서, 역시나 메모리의 압박에 마음을 졸이면서 소스 이곳저곳을 뒤지던 중,
문득 어제 본 왕과나 드라마에서 어우동 여사의 "등잔밑이 어두우시군요.." 라는 대사가 불현듯 떠오르더군요.

뭔가 계시를 받은것은 아닐까 하는 유치한 생각에 정말로 간단한 루틴쪽을 다시 들춰 봤습니다.

동적배열을 쓰는 함수가 하나 있습니다.
웹페이지 패턴에 관련된 데이터를 다루는 루틴인데 복잡한 페이지일 경우 패턴 사이즈가 제법 됩니다만,
루틴 자체는 간단한 편이라 별로 신경을 안썼는데 아뭏튼, 그 배열변수를 쫓아서 함수의 맨끝까지 가보니..

다 쓰고 초기화를 안했더군요 ㅡㅡ;;;

눈이 번쩍 뜨이면서 변수 := nil; 요 문구 하나를 집어넣고 재컴파일하고 전체 장터를 시뮬레이션 해본 결과..
10메가 ~ 15메가를 유지하고 있습니다. 대략 10분정도 참으로 허탈했습니다;;;;

무식하면 수족이 고생한다는 말을 모.. 처음 겪는건 아니지만..
전체 시스템에서 동적배열 쓰는 부분이 저 부분 딱 하나랍니다. 아하하하 ㅡㅡ;;;;

휴.. 이렇게 해서 메모리 문제는 해결을 하게 되었습니다. 쿡..
꺼진불도 다시 보기전에 불 끌때 확실~하게 끄라는 모 선배님의 말씀을 떠올리면서..

이제 또 다른 문제들을 해결하기 위해 좀 자구 와야겠습니다.. 졸리네요. 쩝..
오늘 선거 잘 하시구요, 연말 송년회때 뵙겠습니다.
김상구.패패루 [peperu]   2007-12-19 15:54 X
ㅋㅋ 그러니 코드가드 함 돌려보라니깐....
단, HeapAlloc쓰고 있는 부분 있으면 전부 malloc계열로 바꿔놓구 테스트... HeapAlloc은 안잡아주더구만
Lyn [tohnokanna]   2007-12-19 22:19 X
허허허허 ㅡ.ㅡ;;;
아제나 [azena]   2007-12-20 00:48 X
코드가드 원츄입니다.;;; 프로그램 종료 후에 코드가드에 아무것도 안 잡혀야 마음이 놓이더군요.
강재호.만해 [greenuri]   2007-12-20 09:56 X
그런데 전 가끔가다가 코드가드 때문에 실행 파일이 망가지는경우가 있어서..

액세스 바이얼레이션 0x000000C5 뭐 이런 에러나가 나는게 겁나서 ^^

그래도 요즘엔 그냥 켜 놓고 씁니다 ㅋ~
utime.김성하 [utime]   2007-12-20 10:03 X
저도 코드가드 쓰고 싶은데~ 델파이엔 왜 없는지~ ㅠㅠ
yypbd [yypbd]   2007-12-22 18:49 X
흑 대략 7년여전에 SQL 처리문 작성하면서 전역 SQL 텍스트가 들어가는 변수에다가

a := 'sql 문 어쩌주저쩌구'; 요렇게 해야하는걸
a := a + 'sql 문 어쩌주저쩌구'; 하는 바람에

한달동안 내렸다 올렸다 하던 기억이 납니다.

메모리는 얼마 안늘어났는데 쿼리문이 계속 늘어나면서 여러번 작업이 되니 처리가 점점 늦어졌었죠.

문제는 서버다 보니 작업들이 쓰레드로 돌아서 대충 느려진다는 감만 있지 실제 느려지는게 체감이 안되서 늦게 발견이 됐습니다.

하루 처리양이 몇만건 단위였는데 지금 생각하면 서버가 참 좋았구나라는 생각이 듭니다 ㅠ.ㅜ

+ -

관련 글 리스트
13615 등잔밑이 어둡다.. ㅠ.ㅠ YULL 2424 2007/12/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.