Использование оперативной памяти скрипта Raspberry Pi 3

#node.js #websocket #ram #raspberry-pi3 #modbus

#node.js #websocket #ОЗУ #raspberry-pi3 #модбус #modbus

Вопрос:

Я использую raspberry pi 3 для извлечения последовательных данных (USB) с устройства, затем я отправляю эти данные с помощью websockets клиенту. Все выполняется на NodeJS.

Для извлечения данных с устройства мы используем modbus-rtu, но у нас проблема с оперативной памятью. Скрипт перестает работать через 1-2 часа. Мы выяснили, что .readHoldingRegisters() со временем увеличивает использование нашей оперативной памяти.

Есть какие-нибудь советы по решению?

Комментарии:

1. Найдите в Google «утечки памяти узла» , это даст вам хороший список страниц, на которых объясняется, как устранять утечки памяти.

Ответ №1:

Первое, что нужно сделать с узлом в среде с ограниченным объемом оперативной памяти (для узла доступно менее 1,5 ГБ), это сообщить самому узлу, потому что, похоже, он не может знать сам.

Если вы не используете GC, предположим, что у него доступно не менее 1,4 Гб, а узел GC является ленивым, что означает, что он будет ждать этого предела, чтобы освободить много памяти. Итак, первое, что нужно сделать на Rasberry Pi 3 с 1 ГБ оперативной памяти, это ускорить сборку намного раньше, например, на 500 МБ оперативной памяти.

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

Это заставит GC действовать быстрее (размер старого пространства — не единственное пространство памяти узла, но оно самое большое, поэтому GC должен работать с процессом узла 500/600 Мб)

GC — это синхронная операция (отсюда и ленивый шаблон), это может повлиять на производительность, поэтому вам, возможно, придется точно настроить лимит.

Если вы все еще сталкиваетесь с проблемами после этого, у вас действительно утечка (память, которую мусор не может восстановить).