2014-10-13 3 views
2

ios 게임 http 서버로 node.js 0.10.18 (Amazon EC2에서)을 사용하고 있습니다.node.js의 메모리 누수를 의미합니까?

메모리 사용량을 인쇄하려면 process.memoryUsage()을 사용합니다. 노드의 메모리 사용이 비정상임을 발견했습니다.

노드 machine1에 :

2014-10-13T02 : 35 : 04.782Z - 중요 :

이틀 동안 실행 한 후 프로세스 : heapTotal 119.70 MB는 441.57 MB

RSS 84.62 MB를 heapUsed machine2에 노드 :

2014-10-13T02 : 36 : 01.057Z - 중요 : 프로세스 : heapTotal 744.72 MB는 1045.53 MB

,536,913,632 RSS 108.19 MB를 heapUsed 10 개

결과는 다음과 같습니다

  1. 모두 heapUsage의 아주 작은, 그것은 노드 프로세스가 실행 시간을 함께 할 수 없다.

  2. machine2에있는 heapUsed보다 훨씬 큽니다. 프로세스를 다시 시작할 때까지 결코 작아지지 않습니다. 그러나 heapTotal (machine1)은 정상적으로 보입니다.

    machine1은 Amazon EC2 m3.xlarge, machine2은 Amazon EC2 m3.medium입니다. Amazon CloudWatch에서 나는 machine2의 성능이 불충분하다는 것을 알고 있습니다. 때로는 machine2의 CPU 사용량이 100 %가됩니다. 그렇다면 비정상적인 heapTotal 사용은 하드웨어의 부족함과 관련이 있습니까? node-usage 모듈을 사용하면 노드 프로세스의 CPU 사용이 50 %를 넘지 않기 때문에 100 % CPU 사용은 노드 프로세스의 결과가 아닙니다. 이웃 가상 머신이 사용량을 도난 당했다고 생각합니다 (Amazon EC2에서 공유 된 CPU 시간이 있음을 알고 있습니다).

  3. 저는 버퍼 메모리 사용량이 (rss - heapTotal)이라는 것을 알고 있습니다. 두 머신의 버퍼 메모리 사용량이 점차 증가한다는 것을 알게되었습니다. 보시다시피, 버퍼 메모리 사용량은 모두 2 일 동안 실행 한 후 300MB 이상입니다.

내 질문은 : heapTotal 사용이 heapUsed가 매우 작은 경우에도 공개되지 않습니다 왜

  1. ? 노드 자체 나 다른 코드의 버그에 문제가 있습니까? 하드웨어를 업그레이드하기 위해 문제를 해결할 수있는 유일한 방법입니까?

  2. 왜 버퍼 사용이 점차 증가합니까? 메모리 누수가 발생 했습니까? 노드 자체 나 다른 코드의 버그에 문제가 있습니까? 아니면 그냥 무시하니?

고마워요!

답변

0

이 게시물의 내용 https://www.joyent.com/blog/walmart-node-js-memory-leak. 버전 < = 0.10.21에 메모리 누수 버그가 있음을 발견했습니다. 이 버그는 0.10 버전에서 수정되었습니다.22

노드를 최신 버전 0.10.32로 업그레이드하고 machine2의 하드웨어를 향상 시켰습니다.

두 가지 메모리 문제가 절대로 다시 나타나지 않습니다. 양쪽 모두의 메모리 사용량은 매일 몇 MB만큼만 증가 할 것이므로 내 노드 프로세스가 일부 플레이어 데이터를 캐시하기 때문에 정상적인 것 같습니다.

두 가지 문제가 같은 이유로 인해 발생했을 수 있으며 수정되었습니다.

관련 문제