서버 단 개발 하면서 비슷한 경험이 있었습니다만, 결론은 동기화에 제대로 되지 않았기 때문에 벌어졌던 일이었습니다.
우선은 IsMultiThread 전역변수를 true로 놓지 않으셨으면, 다음 코드를 넣으시는 게 좋을 듯 합니다.
IsMultiThread := true;
메모리 관리자 같은 부분에서 thread-safe하게 구동되게 하는 역활이라고 합니다.
그래도 해결이 안 되신다면 access violation 난 부분을 트래킹하시는 것 외에는 방법이 없을 듯 합니다.
access violation 에러가 났을 때, 출력되는 번지수를 토대로 코드의 line을 알 수 있는 방법이 팁&트릭 게시판에 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=600
제 의견으로는 동기화 부분에서 문제가 있을 듯 합니다.
의심스러운 부분의 원자화 여부를 점검해보시는게 좋을 듯 합니다.
조금이라도 도움이 되기를 바라겠습니다.
허니스탈 님이 쓰신 글 :
: 안녕하세요.
:
: 항상 이곳에서 검색으로 많은 도움을 받아왔다가 검색해도 나오지 않아
:
: 질문을 올려봅니다.
:
: 개발환경은 싱글 cpu의 노트북이며 윈도우 xp home을 사용하고 있습니다.
:
: 빌더는 6버전이며 사용된 컴퍼넌트는 Apro, Flatstyel, Rxlib, indy9입니다.
:
: 실행소스는 데이터를 수집하고 운영자의 명령을 받아 기타 장치들을 제어하는 서버입니다.
:
: 문제가 되는것은 노트북에서 디버그 모드로 실행했을 경우 몇날 며칠을 아무런 문제없이 동작했음에도 불구하고
:
: 실행환경에 옮기면 억세스 바이얼레이션이 발생한다는 것입니다.
:
: 실행환경은 hp서버군이며 한대는 듀얼 cpu 한대는 싱글 cpu입니다. 두 서버모두 제온 cpu를 사용합니다.
:
: os는 윈도우 2003 스탠다드 에디션 서비스팩 1이구요.
:
: 듀얼 cpu를 가지고 있는 서버는 하이퍼 스레딩 기능을 끄고 물리적인 cpu두개를 사용하고 있으며
:
: 싱글 cpu를 가지고 있는 서버는 하이퍼 스레딩 기능을 켜고 논리적인 cpu두개를 사용하고 있습니다.
:
: 문제가 되는 서버는 듀얼 cpu를 가지고 있는 서버인데요. 싱글 cpu의 서버는 몇달을 문제없이 잘 돌아가고 있습니다.
:
: 그러나 듀얼 cpu를 가지고 있는 서버는 대중없이 억세스 바이얼레이션을 뿜어내는데요 하루가 걸릴 때도 있고 몇분만에
:
: 죽어버릴 때도 있고 자기 맘입니다. 실행환경에 빌더를 설치해서 디버그 모드로 돌려보고 싶으나
:
: 정부 부처의 서버들이라 설치할 수 없는 상황이구요. 우선 임시방편으로 듀얼 cpu의 서버에서 실행되고 있는
:
: 프로세스에 작업관리자에서 선호도 설정을 해서 한개의 cpu로만 돌도록 했는데요. 이렇게 하면 아주 죽지 않는건 아니지만
:
: 그래도 한달 넘게 버티기도 하고 그럽니다. 다만 사용자에게 앞으로 이렇게 사용하라고 할 순 없는 노릇이죠.
:
: 그래서 여러 방도를 찾아봤으나 제 지식으로는 알아낼 수가 없어 이렇게 질문을 올립니다.
:
: 혹시 이와 비슷한 문제를 겪으시고 해결하신 분이 계시면 도움을 부탁드립니다.
:
: 그럼 모두 즐거운 주말 맞이하시기 바랍니다.