Problème scénarios : La dernière exécution du scénario ne s'est pas lancée

Tags: #<Tag:0x00007fa7aa254e10> #<Tag:0x00007fa7aa254d48>

Bonjour,

Depuis quelques jours j’ai des erreurs dans le lancement des scénarios. J’ai tenté de réinstaller l’OS et de restaurer une sauvegarde, ça a fonctionné quelque jours mais le problème est de nouveau là. Il s’agit d’une jeedom v3.3.53 sur debian 9.13.

Au niveau système, il n’y a pas de problème au niveau de la charge (~0.2), de la mémoire (250mo de libre), de l’espace disque et pas de problème non plus au niveau IOPS.

scenario :

[2020-11-24 20:03:15][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:04:00][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:04:45][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:05:30][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:06:16][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:07:01][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:07:46][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:08:31][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".
[2020-11-24 20:09:16][ERROR] : La dernière exécution du scénario ne s'est pas lancée. Vérifiez le log scenario_execution, ainsi que le log du scénario "EspPortail".

scenario_execution : vide

cron_execution :

PHP Warning:  exec(): Unable to fork [php /var/www/html/core/class/../../core/php/jeeScenario.php  scenario_id=33 trigger='#3214#' "message='Scenario execute automatiquement sur evenement venant de : [Root][esp_portailin][action]'" >> /var/www/html/core/class/../../log/scenario_execution 2>&1 &] in /var/www/html/core/class/system.class.php on line 172
PHP Warning:  exec(): Unable to fork [php /var/www/html/core/class/../../core/php/jeeScenario.php  scenario_id=33 trigger='#3214#' "message='Scenario execute automatiquement sur evenement venant de : [Root][esp_portailin][action]'" >> /var/www/html/core/class/../../log/scenario_execution 2>&1 &] in /var/www/html/core/class/system.class.php on line 172
PHP Warning:  exec(): Unable to fork [php /var/www/html/core/class/../../core/php/jeeScenario.php  scenario_id=33 trigger='#3214#' "message='Scenario execute automatiquement sur evenement venant de : [Root][esp_portailin][action]'" >> /var/www/html/core/class/../../log/scenario_execution 2>&1 &] in /var/www/html/core/class/system.class.php on line 172

image

Merci d’avance pour votre aide

Hello,

En l’état, ça va pas être simple, il manque le plus important : le contenu des scénario… Là à part lire comme toi, on ne peut rien déduire.

Après j’ai en plus l’impression que ton jeedom n’est pas à jour… et tourne sous strech. C’est pas vraiment la version la plus à jour, d’un coté comme de l’autre

Merci,

Il me semblait que la v10 n’était pas encore supporté, je me trompe ? Au niveau du core, il ne me propose pas de version plus récente. Je voulais attendre la sortie de la proc. officielle pour migrer de v3 à v4, c’est pour ça que je suis toujours en v3.

Pour les scénarios je n’ai pas fait de modifications récemment, ils marchaient sans problèmes depuis des mois. Je vais essayer de tout désactiver puis de les réactiver un par un.

Qu’est ce qui dans un scénarios pourrait entraîner ce genre de comportement ?

C’est un long débat… mais 6 mise à jour en attente c’est pas idéal.
Quand à savoir ce qui ne va pas, des modifications il y en a toujours (la vie du système).
Sans plus de précisions de ce que ça fait/doit faire, impossible d’avoir la moindre idée.

Ok merci.
Je vais creuser d’avantage.
Je viens de voir que le jeecron du plugin Mqtt prenait 50% de la ram depuis que j’ai désactivé / réactivé le plugin les scénarios ont l’air de remarcher.

Je pense avoir une piste, le jeecron du plugin Mqtt voit son utilisation mémoire augmenter au fil du temps; il semblerait que lorsque elle dépasse un certain seuil, php n’arrive plus à faire l’exec nécessaire au lancement des scénarios. (Depuis que j’ai restarté le jeecron hier, plus aucun echec d’exec coté php pour jeescenario; par contre l’utilisation mémoire de Mqtt (lancé par jeecron.php) augmente constament. Je suspecte que quand elle va devenir trop importante le problème va réapparaître. Ce que je ne comprend pas c’est que l’exec échoue alors qu’il reste encore des ressources sur la machine, il n’y a pas de violation au niveau du ‹ limit › de l’OS, il faut que je creuse si il n’y aurait pas de limitation au niveau de php lui même.

www-data 11719 1.1 7.3 483576 151368 ? S nov.24 8:30 php /var/www/html/core/class/…/php/jeeCron.php cron_id=24517

image

Après vérification, le problème semble bien venir du plugin Mqtt, la mémoire utilisée par le jeeCron de ce plugin augmente de ~8Mo/heure.

jeudi 26 novembre 2020, 19:00:01 (UTC+0100)
www-data 23311  1.6 18.4 683908 378668 ?       S    nov.25  32:20 php /var/www/html/core/class/../php/jeeCron.php cron_id=24517

vendredi 27 novembre 2020, 13:00:01 (UTC+0100)
www-data 23311  1.6 22.7 837508 466812 ?       S    nov.25  49:37 php /var/www/html/core/class/../php/jeeCron.php cron_id=24517

En regardant coté du coté des pages mémoire il y a une page qui grossie


7fa11d400000-7fa137c00000 rw-p 00000000 00:00 0
Size:             434176 kB
Rss:              434176 kB
Pss:              434176 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:    434176 kB
Referenced:       434176 kB
Anonymous:        434176 kB
AnonHugePages:    434176 kB
ShmemPmdMapped:        0 kB
Shared_Hugetlb:        0 kB
Private_Hugetlb:       0 kB
Swap:                  0 kB
SwapPss:               0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mw me ac sd hg

J’ai essayé de regarder un peu le contenu de cette page mais je n’en ai pas tiré grand chose, si ce n’est que je retrouve des payloads recus en mqtt qui remontent à plusieurs jours (je ne comprend pas ce qu’ils font encore en mémoire).

Je ne connais pas suffisamment bien php pour identifier d’ou pourrait venir ce leak. La solution de facilité semble être de passer sur le plugin jMqtt qui ne semble pas avoir ce genre de problème. (Ou de restarter périodiquement le jeeCron du plugin Mqtt, mais c’est pas très propre…).

Si un modérateur passe par là il faudrait peu etre déplacer ce topic coté plugins.

Merci

Hello,

Il faut aussi regarder tes scénarios… Si tu les lances trop souvent (ou en cascade), qu’ils se terminent pas à temps ou mal, s’il qu’ils se perturbent les uns les autres, ça peut expliquer le comportement du plugin…

Bonjour,

Merci, je vais essayer de regarder coté scénarios; mais ca me semble étonnant que les scénarios puissent avoir un impact sur l’utilisation mémoire d’un plugin qui tourne dans un tout autre processus.

J’ai fait un profiling avec Xdebug sur le jeeCron du plugin; ca donne des jolies graph, mais je ne sais pas trop comment les interpréter (valeur en bytes).

image

image

image

Le lien est possible dans les 2 sens :

  • un scénario qui lance une action du plugin qui lance un nouveau thread
  • une action du plugin qui déclenche un scénario

C’est beau, mais effectivement ça aide vraiment

Bonjour,

Du coup je suis parti sur la solution de simplicité :

J’ai tout migré sur le plugin jMqtt et aucun problème avec ce plugin là, qui en plus apporte des fonctionalité interessante comme la possibilité de ne pas tout auto inclure, ce qui est utilse quand le broker mqtt n’est pas utilisé seulement pour jeedom.

Bonsoir,

Personnellement, je suis passé de MQTT à jMQTT pour les fonctionnalités et j’ai maintenant des problemes.
Après un certain temps, les publish ne fonctionnent plus et je me prend un message ’ Invalid function arguments provided’ pour chaque envoi dans le log jMQTT.
Il proviens de la librairie Mosquitto-PHP qui est utilisé sur les 2 plugins MQTT et jMQTT.

Ma question est la suivante : quelles commandes as-tu utilisé pour lister les pages mémoires lié au process mais aussi pour regarder le contenu de celles-ci?

Je me demande si ce n’est pas lié à PHP7.3.
Il y a 2 issue sur le github de Mosuitto-PHP qui évoque ce probleme.

Merci

+1 j’ai le même problème.

J’ai été voir et pas trouvé. Pas d’importance. Il n’y a pas la solution je suppose ?