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
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
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.
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.
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…
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).
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.
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.
C’est probablement du a ton soucis lors de l’installation de zwave js où les scenario ne se lançais plus. Attends deux trois jours pour voir si ça se stabilise pas.
Par contre, ce sujet est caduc pour jMQTT, car le démon a été entièrement recodé en 2021 pour ne plus utiliser la bibliothèque Mosquitto-PHP (qui est en PHP) engendrait des fuites mémoires, des blocages entre les différentes parties du code de Jeedom ainsi que des lenteurs quand il y a beaucoup de messages échangés (>500 par minute).
Elle a été avantageusement remplacée par paho.mqtt.python (en Python) qui est bien plus stable et moins gourmand en mémoire.