Перестает работать wb-rules

Периодически перестают работать правила. Т.е. демон wb-rules запущен, живой, но ни одно правило не работает.

Например, есть простое правило, которое читает температуру с 1wire датчика и пишет ее в виртуальный девайс. И лог пишет.

Вот в один прекрасный момент в лог перестает писать, значение в виртуальном девайсе не меняется, хотя значения у датчика меняются.

В /var/log/messages есть вот такое. Появилось, кстати, пару дней назад и не факт, что связано. До этого правила так же отваливались и в логе вообще было пусто.

Jan 25 09:03:01 wiren6 daemon.info wb-rules[11644]: ERROR: queue Events is almost filled! 2048/2048
Jan 25 09:04:01 wiren6 daemon.info wb-rules[11644]: ERROR: queue Events is almost filled! 2048/2048
...
Jan 25 10:10:02 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1795/2048
Jan 25 10:10:02 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1794/2048
Jan 25 10:10:02 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1793/2048
Jan 25 10:10:02 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1817/2048
Jan 25 10:10:02 wiren6 daemon.info wb-rules[23654]: INFO: queue handleMessage length back to normal: 1024/2048

Лог полностью:

Пока решил проблему костылем - по крону в правилах пишу таймстемп в виртуальный девайс и уже в системном кроне проверяю, если текущее время сильно убежало от этого таймстемпа, то перезапускаю wb-rules.

Но хотелось бы от этого костыля избавиться.

Версия пакета wb-rules - 1.7. Но отваливалось и на более ранних.

Возможно в правилах есть операции, которые забивают память?
Какие есть фрагменты, например работающие с таймерами?

Есть 2 таймера, которые опрашивают статус ups и по snmp забирают данные с одного сервера. Но они выполняются раз в 10 секунд. Я не думаю что особо влияют на память.

Покажите код формирования таймеров и их вызов


А вы про таймеры думаете применительно к ошибкам с очередью?

Я экспериментировал с таймерами.
При большой частоте их вызова (чаще 1 раза в 3 сек) правила отваливались после 80-100 циклах запуска.

Было подозрение, что после срабатывания правила его объект не удалялся и при запуске нового они набивались в кучу и вешали wb-rules.

Попробуйте уменьшить частоту запуска до безопасных 30 сек.

Добрый день!

Попробуйте, пожалуйста, переписать это правило через cron-правило:


Например:
defineRule("update_windows_all", {
  when: cron("@every 1s"),
  then: function () {
    update_window("Window 1 open", "6");
    update_window("Window 2 open", "7");
    update_window("Window 3 open", "8");
    update_window("Window 4 open", "9");
  }
});

Кажется, с таймерами действительно бывают проблемы. С выполнением по cron должно работать стабильно.
Пожалуйста, напишите сюда о результатах.

Спасибо за идею с кроном, переписал - наблюдаю.

Так, прошло 5 дней. Зависаний wb-rules пока не было, но ошибки продолжают валиться в лог

Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1799/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1798/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1797/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1796/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1795/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1794/2048
Jan 30 09:17:00 wiren6 daemon.info wb-rules[23654]: ERROR: queue handleMessage is almost filled! 1793/2048
Jan 30 09:17:02 wiren6 daemon.info wb-rules[23654]: INFO: queue handleMessage length back to normal: 1024/2048

@poglazov подскажите, кто эту ошибку генерит? В репе wb-rules я не нашел подобного сообщения. Сам js движок, получается?

Я тоже не программист, но если нужно увеличить длину очереди, то это, кажется, здесь: https://github.com/contactless/wb-rules/blob/5f9bed68aa3fd62b5975fb5c4587186c867a591f/initscripts/wb-rules#L32

BTW, опять отвалились правила - проработали в этот раз 12 дней без перезагрузки демона.

Отвалилось уже на версии с cron?

ага

У меня та же проблема с остановкой wb-rules из-за:

ERROR: queue handleMessage is almost filled

Как понять вообще из-за чего это. Правил которые тригерятся по таймеру - нет. Только по cron и изменению состояния устройств.

Правильно понимаю, что это может быть связано с недостаточной производительностью WB5 и он тупо не успевает обработать запросы?!

У меня, кстати, и до появления этой ошибки wb-rules падал. Не думаю, что они связаны. И у меня wb6, там с производительностью/памятью все более-менее.

У меня идет перезапуск сервиса, когда queue становится полностью full…

Беда в том, что при перезапуске wb-rules у меня срабатывают все правила и включается свет в 3-и часа ночи в коридоре. Есть правило, которое включает свет в коридоре, когда квартира снимается с сигнализации (сухой контакт)… Как отфильтровать данную ситуацию - понятия не имею :frowning:

Проблема с зависанием правил из-за роста очереди сообщений была описана здесь больше года назад. Похоже, это тянется до сих пор.
Ситуация критическая - правила могут перестать работать в любой момент, а новой версии движка с исправлениями до сих пор нет.

Подскажите, как Вы это реализовали?