2014-09-18 1 views
0

내 프로세스 Killed가 메모리 부족 킬러에 의해 처리 중입니다. 내가 뭘하고 싶은데요 노드 "너무 많은 메모리를 사용하지 말아라"고 말할 수있다. 그래서 어떤 정크를 할당 할 수 없다면 예외를 던져서 oom killer에 의해 죽지 않고 코드에서 처리 할 수있다. 이것이 가능한가? 어떻게해야합니까?노드 측 (OS가 아닌)에서 node.js의 메모리 사용을 어떻게 제한합니까?

+0

메모리 문제의 원인이되는 특정 코드를 추적하고 수정할 수 없습니까? 비록 당신이 "살인자에 의해 살해당하는 것"에서 더 작은 모자를 씌울 수 있다고하더라도, 한계가 맞았을 때 당신은 무엇을 할 것입니까? – mscdex

+0

아마도 여기에 뭔가가 있습니다 : http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/? (블로그를 통해보세요) – loveNoHate

+0

또는 여기 (파트 5) : https://hacks.mozilla.org/category/a-node-js-holiday-season/? – loveNoHate

답변

2

많은 메모리를 차지하는 것을 알아내는 데 도움이되는 다양한 모듈이 npm에 있습니다.

  • node-webkit-agent 당신이 메모리 (및 CPU) 프로파일을 수행 할 수 있습니다와 가지고 모든 크롬 개발자 도구에서 힙의 스냅 샷을 비교 :

    로 시작합니다.

  • heapdump 및 그에 관한 관련 기사 here. node-webkit-agent의 모든 기능을 필요로하지 않고 필요로하며 코드에서 힙 덤프를 디스크에 주기적으로 저장하려는 경우 유용 할 수 있습니다.

  • node-inspector 변수 및 대화 형 디버깅 및 실시간 검사 용.

+0

+1 디버깅 제안에 대한,하지만 기술적으로 어떻게 노드 정상적으로 메모리 문제를 정상적으로 처리 할 수있는 질문에 대답하지 않습니다. –

+0

메모리 문제는 V8에서 정상적으로 처리 할 수 ​​없으므로 정상적으로 처리 할 수 ​​없습니다. 지금 당신이 할 수있는 가장 우아한 "영원한"모듈 인 monit, systemd 등은 예기치 않게 그렇게 죽으면 자동으로 프로세스를 재시작합니다. – mscdex

+0

글쎄 실제로, 내 문제는 시스템 메모리가 부족하거나 프로그램이 너무 많은 메모리를 사용할 때 프로세스를 죽이는 리눅스 메모리 부족 킬러에서 발생합니다. 그래서 제 문제는 V8에서 나온 것이 아닙니다. V8/노드 쪽에서 메모리를 제한했다면, 여전히 우아하지 않을 것이라고 말하고 있습니까? 나는 그 일을하는 방법을 아는 데 여전히 감사 할 것입니다. –

관련 문제