안녕하세요 어제 같은 글 올렸는데 그때는 정보가 부족했던 듯해서
이번에는 더 많은 정보를 가져왔습니다.


일단 어떻게 메모리 문제가 발생하는지 보여드리도록 하겠습니다.


아래는 일반적인 메모리 상태입니다.


a15714ab041eb360be3335625683746f01534528d6a7ee89d63360f39d14cd6e7557f2e7149c9faa6c49d2652436

저희가 먼저 볼 것은 저기 위에 있는 nwjs 부분입니다.
일반적인 경우에는 CPU는 17퍼센트 메모리는 512만큼 쓰는 것을 알 수 있습니다.

그렇다면 개발자 도구를 키면 어떻게 문제가 생기는지 말씀드리겠습니다.

a15714ab041eb360be3335625683746f01534528d6a7ee89d63360f29f12cd6e4eeeadefed27e99d4233e0ec89b2

개발자도구를 키면 보다시피 전체 CPU 사용량이 27퍼센트로 늘고 메모리 사용량은 지속적으로 증가하여 1000을 넘는 것을 발견할 수 있었으며
메모리 사용량은 계속 늘어난다는 사실을 관찰할 수 있었습니다.

nwjs(9)부분에서 개발자 도구에 해당하는 맨 아래쪽을 보면 이상하게 메모리 사용량이 많다는 것을 발견할 수 있습니다.




하지만 특이한 점은 다음과 같습니다.




a15714ab041eb360be3335625683746f01534528d6a7ee89d63360f49812cd6e5ffbadbb494a006f5bba27faac97

그건 바로 게임을 킨 뒤 개발자 도구를 키고 개발자 도구를 여러 창들 중에서 맨 위로 올릴 경우 메모리 사용량은 증가하지 않았습니다.
하지만 다시 게임을 여러 창들 중에서 맨 위로 올린다면 똑같이 메모리 사용량이 증가했습니다.


그럼 이제 제가 가져온 자료들은 다음과 같습니다.



a15714ab041eb360be3335625683746f01534528d6a7ee89d63361f49917cd6e37ba2b058f19b8b71652d4be6445

일단 먼저 JS HEAP 그래프와 Node 그래프입니다.
이상하게 검사를 시작하면 메모리 사용량이 떨어져서 괜찮게 나오는지는 모르겠는데
제가 봤을 때는 괜찮아 보이지만 혹시 모르니까 가져왔습니다.

다음은 스냅샷 비교한 것입니다.

a15714ab041eb360be3335625683746f01534528d6a7ee89d63366f99c17cd6e3d96dc688c36892ffb66415b12

대충 뭐가 많이 나오기는 하는데 제가 어느정도 살펴본 결과 제가 건드린 것 없는 것 같았습니다.
더 필요하신 사진 있으시면 가져올테니 말해주시면 감사하겠습니다.

그리고 이건 제가 생각하기에 가장 단서가 될 것 같은 스냅샷입니다.

a15714ab041eb360be3335625683746f01534528d6a7ee89d63367f09c12cd6ec3e20e0b6acdc99876f330ae9f4f


아까 위에서 말한 개발자 도구를 창들 중에서 맨 위로 올렸을 때 찍은 그래프 스냅샷입니다.

이 경우 파란색 바가 회색바로 돌아오면 정상적인 것인데
대부분 회색바로 돌아오고 튀어나온 한개의 파란색 바도 제가 건드린 것이 아니라서 문제는 없을 것 같습니다.


하지만 만약에 게임 창을 창들 중에서 맨 위로 올리면 다음과 같은 문제가 발생합니다.



a15714ab041eb360be3335625683746f01534528d6a7ee89d63367f39c17cd6e657ab687ce6dc5fa5fa5993e73d8

게임 창을 맨 위로 올린채로 스냅샷을 찍자 위에 보이는 것처럼 파란색 바가 회색바로 전부 돌아오지 않으며
또한 이 현상이 지속적으로 나타나는 것을 알 수 있습니다.
아마 이것이 현재 가지고 있는 문제를 보여주는 것이라고 저는 생각합니다.

그러니 관련된 정보가 필요하다면 더 가져오겠습니다.

또한 이건 개인적인 의견인데



a15714ab041eb360be3335625683746f01534528d6a7ee89d63367f59d1ccd6ea9c9151aded69ba2c1ca0545


제가 방금 말한 문제의 스냅샷 그래프를 조사하는 동안 문제가 있다고 나온 부분입니다.

이건 알만툴의 스크립트 기능을 이용한 것과 관련이 있는데
알만툴에서 스크립트 기능을 이용해서 뭔가를 쓰면 그걸 코드로 바꿔서 실행시켜줍니다.
한마디로 문자열을 주면 그걸 코드로 바꿔서 실행시켜주는 것이죠



a15714ab041eb360be3335625683746f01534528d6a7ee89d63367f49d11cd6e70b3a99d38c89e0b948996

근데 이건 진짜진짜 개인적인 추측인데 알만툴이 문자열을 코드로 어떻게 바꾸는지 찾아보니 eval()을 쓰더라고요.

그런데 이 eval이 문제가 많은 코드라고 알고 있어서 어쩌면? 이 eval이 문제를 일으키는 것이 아닐까 생각이 듭니다.
물론 제 얄팍한 지식만으로 도출해낸 추측이니 너무 귀담아 듣지 않으셔도 됩니다.