• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

메모리 누수문제.

22.05.16 01:42 작성 조회수 292

0

안녕하세요. 루키스님^^

루키스님 강좌를 토대로 열심히 게임개발을 공부하고 있는 직장인입니다.

다름이 아니고 개발 후 메모리 점유율이 높아지는 현상이 생겼는데요.

루키스님의 최종 프로젝트를 이용해 오라클 클라우드 서버 인스턴스에서 구동해보고 관찰을 해보았습니다.

메모리 점유상태가 50%를 지속적으로 잘 유지하는 것같다가도(몬스터 500마리) 이후에 몬스터를 다수 잡고난 뒤에 더이상 게임 접속없이 몇 일 결과를 지켜보니 메모리 점유율이 점차 높아지는 현상이 발생하였습니다.

플레이어의 접속이 없어도 메모리 점유율이 올라갑니당ㅠㅠ

몬스터 리젠과 관련된 부분으로 추측해서 열심히 뜯어봤는데 도무지 어디서 메모리 점유율이 계속 올라가는지 감을 못잡겠습니다. ㅠㅠ

어느 부분을 먼저 살펴보면 좋을지 몰라 힘트라도 얻고자 이렇게 글을 남기게 되었습니다.ㅠㅠ

그리고 유투브 구독신청과 좋아요 매번 누르고 있어용~ ㅎㅎ 영상 많이 올려주세용~

 

답변 1

답변을 작성해보세요.

1

음 확실하지만 않지만 예전에 강의 소스코드 기반으로
샘플 게임을 만들 때 비슷한 증상이 있었는데,
특징 로직에서 Job 취소가 제대로 되지 않아
Job이 무한 증식하는 버그가 있었던 것으로 기억합니다.
(몬스터가 죽어서 디스폰 되어야 할 때였나? 그랬을거에요)

ChaYong님의 프로필

ChaYong

질문자

2022.05.16

감사합니다!!! Job쪽이 문제였군요!! 바로 확인해보겠습니다^^

ChaYong님의 프로필

ChaYong

질문자

2022.10.04

이 문제 해결 못해서 맨붕을 때려 한동한 해당 부분은 땜빵처리로 넘어갔었습니다.ㅜㅜ

오늘에서야 해결이 됫네요 ㅜㅜ

 

당시에 말씀하신 부분이 몬스터가 죽었을 때 부분이라고 하셔서

얼떨결에 몬스터의 State가 Die일 경우 update문을 PushAter하지 않게 만들어보니 해당 증상이 없어지는 건 확인했습니다.(오잉?)

 

원인은 몰랐으나 일단 해결이 됫으니 그냥 넘어갔었는데

 

나름 컨텐츠를 개발하다가 잡예약취소부분을 쓸일이 있어 사용햇는데 헐. 먹통이더라구요 ㅜㅜ

 

이거 고쳐보자하고 하나씩 살피는데...

 

왠걸... 전에는 아무 생각없이 괜찮다고 생각햇던 이 부분!!!

public IJob PushAfter(int time, Action action ) { timer.Push( time, new Job(action)); return new Job(action); }

이걸 보고... 중단점이 걸린 것 마냥.. 어?! 하면서 시선이 멈추었습니다.

 

return을 하는데 새로은 Job을 만들어서 해버린 이 부분!!

 

바로 아래와 같은 방식으로 수정했습니다.

public IJob PushAfter(int time, Action action) { IJob job = new Job(action); timer.Push(time, job); return job; }

 

그랬더니 아주 시원하게 해결이 됬네요 ㅠㅠ (땜빵코드 지운 상태.)

일주일째 인스턴스 메모리를 추적하고 있지만 더 이상 가비지가 쌓이는 문제는 보이지 않습니다. ㅠㅠ

루키스님이 job취소가 안된다는 그 말씀을 좀 더 의미있게 생각해서 파봤으면 금방 해결 됬을 걸... 이런 후회가 막심하네요. ㅜㅜ

 

요샌 강좌를 여러번 돌려보면서 유니티엔진에서 만드셨던 3D를 모바일 MMORPG로 만들어보는 중입니다. 내 손안에서 만들어지는 세상을 보고 있자니 너무너무 재밌네요^^ 항상 감사합니다. 루키스님!!

오! 버그를 찾으셨다니 다행입니다 ㅎㅎㅎ
Part1~9 긴 여정을 꾸준히 + 아트 리소스 없이
개인 포폴 작업을 이어 가기가 정말 쉽지 않은데
의지력이 대단하신 것 같네요 ㅎㅎ
앞으로도 재밌는 게임 만드시길 바랍니다!

ChaYong님의 프로필

ChaYong

질문자

2022.10.04

이런 기회를 만들어주신 갓키스님께 다시 한 번 감사드립니다^^