Q&A

  • 메모리 관련 문제 입니다.
os는 windows nt 4.0 이고 툴은 델파이 3.0 입니다.

문제는 개발된 프로그램이 실행 되는 동안 메모리가 계속 쌓인다는 것입니다. 4k byte씩요. 윈도우 nt에 보면 작업 관리자라고 있는데 그중 성능을 보면 cpu사용율과 메모리를 모니터 할 수 있는데요 메모리중 커널 메모리의 nonpage영역의 값이 4k씩 증가해 갑니다. 그렇게 계속 증가해가다가는 결국에 프로그램이 다운되 버리는거죠. 프로그램을 종료 해도 프로그램 시작전의 메모리만큼 반환이 되지 않는것 같습니다. 프로그램 시작, 종료를 반복해 보면 메모리가 완전히 반환이 안되고 계속 쌓여가는것을 볼 수 있습니다. 시스템을 껏다가 다시 부팅하지 않는다면 결국엔 프로그램을 계속 띄워 놓았을때 처럼 다운 될것 같습니다. (다운 될때까지 프로그램을 껏다 켜보지 못해서 장담할 수는 없지만)

문제점을 분석하기 위해 여러가지로 생각해 봤는데 이렇다할 단서가 없습니다. 프로그램이 실행되는 동안 쓰레드가 구동 되는데요(원래는 타이머로 돌리던 작업이었는데 원인을 찾는다고 혹시나 해서 쓰레드로 바꾸어 봤는데 똑같습니다.) 쓰레드에서 하는 작업은 dll함수를 호출 하는 것입니다. 이 dll이 하는 일은 저희 회사에서 개발한 아이사 슬롯에 꽂는 카드로 부터 8바이트의 데이타를 읽어 오는 것입니다. 카드의 드라이버로는 winrt를 사용하구요 dll의 source는 없어서 확인을 못하고 있습니다. 제 생각엔 dll 함수에서 하는 작업들도 메모리를 잡아 먹을 부분이 없을것 같습니다. 물론 프로그램 상에서도 없는것 같구요. 그 함수를 호출 하는 부분을 주석 처리 하여 보았더니 전혀 메모리가 쌓이지 않았습니다. break를 걸어 돌려 보았는데 정확하게 64번째 호출하고 리턴을 할때 4k씩 아까 말한 nonpaged의 값이 쌓여가더군요. 뭐가 문제인지 모르겠군요.

고수님들 좀 도와 주세요.(문제점 설명이 잘되었는지 모르겠네요)

0  COMMENTS