2016-10-24 10 views
1

장치에서 직렬 데이터 (USB)를 가져 오는 데 raspberry pi 3을 사용하고 있는데이 데이터를 클라이언트에 웹 소켓과 함께 보내고 있습니다. NodeJS에서 모두 실행됩니다.Raspberry Pi 3 스크립트 RAM 사용량

디바이스에서 데이터를 가져 오려면 modbus-rtu를 사용하지만 램 문제가 있습니다. 스크립트는 1 ~ 2 시간 후에 작동을 멈 춥니 다. 우리는 시간이 지나면 .readHoldingRegisters()가 RAM 사용량을 증가 시킨다는 것을 알게되었습니다.

해결책에 대한 도움말이 있습니까?

+1

Google for _ "node memory leaks _"은 (는) 메모리 누수를 디버그하는 방법을 설명하는 페이지 목록을 제공합니다. – robertklep

답변

2

램 제약 환경 (노드에 1.5gb 미만)에서 노드와 가장 먼저해야 할 일은 노드 자체에 알려주는 것입니다. 왜냐하면 스스로 생각할 수 없기 때문입니다.

GC가 1.4Gb 이상을 사용할 수 있다고 가정하고 노드 GC가 게으름이라는 의미 인 경우 많은 양의 메모리가 해제 될 때까지 기다립니다. 따라서 1Gb 램이 장착 된 Rasberry Pi 3에서 가장 먼저해야 할 일은 500Mb 램과 같이 GC를 더 빨리 수행하는 것입니다.

그것은 빨리 작동하도록 GC를 강제

(옛 공간의 크기는 노드의 전용 메모리 공간은 아니지만, 가장 큰, 그래서 GC는 500/600 메가의 노드 프로세스를 중심으로 행동해야한다)

node script.js --max-old-space-size=500 

GC는 동기 연산 (따라서 게으른 패턴)이므로 성능에 영향을 줄 수 있으므로 한계를 미세 조정해야 할 수 있습니다.

이 문제가 계속 발생하면 참으로 누수가 생깁니다 (가비지에서 검색 할 수없는 메모리).