О! Вопрос: а число потоков wb-rules как-то зависит от кол-ва скриптов? И таки хочется видеть, какой из потоков для чего запущен (хз, мож можно какой признак выставить, чтоб в top/htop его увидеть).
У меня число потоков, вроде, не зависит от числа работающих скриптов. Так-то там 5-7 скриптов, из них 2 “техническиких”, типа мониторниг перезапуска mqtt-serial и живости eMMC, один с запуском shell nodejs и только два оставшихся настораживают - там под 100 “простых” виртуальных устройств типа “CW-WW лампа” с реакцией только на события, и ≈20 “групп ламп+выключатель”, где используется таймер.
Состояние на сейчас:
- восстановил простой скрипт с регулярным пуском (через shell) nodejs скрипта - вроде не влияет
- пока остановлены “технические” и 2 “простых” скрипта для сбора регистров modbus в JSON от Овен и С200ПП, но вряд ли они - там почти тривиальная трансляция без изысков
- в подозрительном скрипте на освещние отключил блок с startTicker/timers[xxx].stop()
- память пока не утекает, но надо ждать от 12 до 20 часов, судя по логам
Основное предположение и вопрос (пока) - а что происходит с памятью, если я вызываю “timers[name+’test’].stop()” для таймера, который не запускал?
Пока основной, но не очевидной причиной видится именно эта строка. Типа “стоп таймера изменения яркости при ЛЮБОМ изменении состояния кнопок” (пуск - по длинному нажатию, стоп - по нажатию/отпусканию/итп любой из пары кнопок)
С утра (стоп 2х простых скриптов и блокировка использования таймера) память ±5Мб не меняется - 220±3Мб, да не 48, как на другом контроллере, но не “течёт”. Ну и частичное обновление на 2602, возможно как-то повлияло.
Давайте, я до (примерно) завтра посмотрю за потреблением памяти, ибо “провал” происходил раз в 8-12-18 часов.
А для программистов вопрос - насколько “безболезненно” вызывать timers[xxx].stop(), если startTicker(xxx) НЕ вызывался
=== для информации
systemctl show wb-rules -p MainPID -p MemoryCurrent -p MemoryPeak -p TasksCurrent; pid=$(systemctl show -p MainPID --value wb-rules); echo "---"; if [ -n "$pid" ] && [ "$pid" -gt 0 ] 2>/dev/null; then ps -p "$pid" -o pid,comm,rss,vsz,%mem --no-headers; else echo "wb-rules MainPID not found"; fi
MainPID=960249
MemoryCurrent=213622784
TasksCurrent=20
---
960249 wb-rules 227448 2927020 5.6