Rest서버를 구현했는데 JSONObject에서 free를해도 메모리 누수가 계속 일어납니다ㅜ

조회수 895회

일단 질문을 읽어주시는분들게 고개숙여 감사를 드립니다.

delphi(tokyo)버전으로 pad서버를 구현중 여러 api를 만들고 성능테스트를 하는과정에서 메모리누수가 있고 서버가 죽어버려서 1개의 1api로만 테스트했을때의 메모리 릭 체킹중인데 어떤게 잘못되었는지 이미지잘모르겠습니다. 사진은 ReportMemoryLeaksOnShutdown := true 으로 본 메모리 누수 결과입니다 좌측은 api 1개 우측은 jmeter로 1000번 request했을때의 결과입니다.

api 구성과 호출은 아래와같습니다. Main.pas 의 일부분 if (FN = 'getHosPet')then begin DM := TDM.Create(nil); try Ctxt.OutContent := StringToUTF8(DM.getHosPet(UTF8DecodeToUnicodeString(Ctxt.InContent),FN).ToString); Ctxt.OutContentType := JSON_CONTENT_TYPE; result := 200; finally freeAndNil(DM); end; end

DM은 TDM = class(TDataModule) 으로 되어있습니다. DM파일에서 getHosPet은

function getHosPet(context : string;FN : String) : TJSONObject; 이렇게 정의되어있습니다.

result.AddPair('code',TJSONNumber.Create(200)); result.AddPair('cmd' ,FN); result.AddPair('msg' ,objFind1); 로 되어있고 objFind1 은 TJSONObject 타입의 변수입니다. main.pas에서 DM의 function을 호출하여 값을 리턴받고 free와 nil값을 셋팅 해줘도 result로 받는 TJSONObject나 TJSONArray 들이 free가 안되는건지 1주일동안 자료를 찾아보고 TDataModule폼을 디자인타임이 없는 unit 파일로 바꾸어 사용해보아도 같은결과가 일어납니다. 또한 DM.pas에서 try finally를 사용하여 오브젝트들을 nil로 create하고 free해줘도 result값이 넘어오기 전이라 그런지 제대로 값이 넘어오지 않거나 혹은 엑세스바이얼레이션 에러가 납니다.

혹시 이부분에 대해 아시는분 있으시면 조언좀 부탁드립니다 ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)