Analyse d'une IA

Bonjour @Mips,

j’avais remarqué une consommation mémoire en hausse constante.

A toute fins utile, je remonte ici une analyse détaillée de Claude Fable d’une fuite mémoire du démon, avec la méthodologie et les chiffres, en espérant que ça puisse aider.

Symptôme

Le démon proxmox::syncDevices (cron deamon=1, cycle 30 s par défaut) grossit continuellement chez moi : ~56 Mo au démarrage → ~979 Mo après 5 jours (RSS mesurée via /proc/PID/statm), soit ~180-200 Mo/jour. Configuration : 1 nœud PVE, 9 VM/LXC, plugin à jour, Jeedom 4.4, PHP 7.4, Debian 11.

Méthodologie

J’ai instrumenté le code en CLI (utilisateur www-data) : mesure de memory_get_usage(false) (tas PHP exact) et de la RSS par itération, avec gc_collect_cycles() avant chaque mesure, puis bissection étage par étage de syncDevices().

Résultats de la bissection

Étape isolée (après warm-up) Fuite mesurée
getPveClient() (login) seul 0
login + getResources 0
getCommandsFileContent 0
createCommandsFromConfig ~0
refreshNode ~2 Ko/cycle
refreshQemuLxc (9 VM/LXC) ~73 Ko/cycle
→ dont updateCmds avec valeurs identiques 0 (chemin « repeat »)
→ dont updateCmds avec valeurs fraîches de l’API ~12-16 Ko/cycle
getQemuLxcSnapshotList seul 0
bloc agent QEMU (info + interfaces + save) 0

Croissance parfaitement linéaire sur 40 cycles complets de syncDevices (+14,6 Ko/cycle de tas PHP, RSS idem, aucun plateau). Le calcul colle avec la prod : ~65-75 Ko/cycle × 2880 cycles/jour ≈ 180-210 Mo/jour.

Analyse

  • La fuite se produit uniquement quand les valeurs changent réellement (uptime, cpu, mem, netin/netout, diskread/write — soit ~10 commandes × 9 VM à chaque cycle). Rejouer les mêmes données = 0 fuite.
  • Chaque vrai changement de valeur qui traverse checkAndUpdateCmd() → cmd::event() du core retient ~1-2 Ko.
  • Cette mémoire retenue est invisible côté userland : rien dans les propriétés statiques de classes (probe closure-safe par réflexion), rien dans les statics de fonctions, rien dans $GLOBALS, aucune ressource qui s’accumule (get_resources()), realpath cache stable, et elle survit à gc_collect_cycles(). Elle est donc retenue en interne par le moteur (buffers mysqlnd, cache PCRE, arènes Zend…).
  • Testés hors de cause individuellement : event::adds, scenario::check, listener::check, addHistoryValue, jeeObject::checkSummaryUpdate, cmd->save().

Interprétation

C’est peut être le pattern « mises à jour de valeurs dans un démon PHP persistant » qui expose une rétention du chemin d’événement du core. La plupart des plugins font leurs checkAndUpdateCmd dans des callbacks HTTP (processus Apache éphémères → mémoire rendue à chaque requête), donc la rétention ne s’y voit jamais. Ici le process ne meurt jamais, donc ça s’accumule. (Le core appelle bien gc_collect_cycles() tous les 30 cycles dans jeeCron.php — sans effet ici puisque ce ne sont pas des cycles de références.)

Pistes de contournement / correction

  1. Contournement utilisateur : augmenter daemonSleepTime (30 → 300 s) divise la fuite par 10. C’est ce que j’ai fait, avec en plus un scénario de supervision qui relance le démon au-delà de 200 Mo.
  2. Piste plugin : un auto-restart périodique du démon (par ex. le cron setDaemon pourrait relancer le process une fois par jour), ou un die() propre après N cycles pour laisser le cron relancer le process — pattern courant pour les workers PHP long-running.
  3. Piste core (à remonter côté Jeedom ?) : identifier ce que cmd::event() retient par événement dans un process persistant.

Je ne répondrai pas à une ia

Pour compléter:

  1. Pourquoi je devrais prendre le temps de lire un message que l’auteur n’a pris le temps d’écrire?
  2. Pourquoi je devrais pendre le temps de lire un post alors que l’auteur n’a pas pris le temps de lire la documentation que j’ai écrite?

Bonjour @xav_38,

Je pense que tu voulais bien faire en soumettant ce que l’IA estime avoir analysé mais il faut se rendre compte que dans la grande majorité des cas c’est contre-productif. C’est exactement ce type de retours qui a fait péter des câbles à Linus Torvalds et d’autres développeurs à plusieurs reprises ces derniers mois. En effet traiter ce genre de retours demande énormément d’énergie en s’appuyant sur un pseudo diagnostic qui s’avère souvent à côté de la plaque et sans connaitre les symptômes de surcroit.

D’ailleurs si on lit bien, l’IA elle même n’a aucune certitude sur ce qu’elle avance : « C’est peut-être… », « Pistes de contournement… » etc.

A mon avis il est préférable de montrer les symptômes que tu constates et les dysfonctionnements qu’ils occasionnent (accompagnés de logs, captures d’écran et tout ce qui peut être utile comme d’habitude). Pourquoi pas y ajouter ensuite une analyse faite par IA même si le développeur sera en mesure de faire de même de son côté si nécessaire mais en l’état je suis d’accord qu’il n’y a aucun élément concret dans ce sujet qui mérite d’aller trifouiller le code du plugin sans même savoir ce qu’on cherche à corriger exactement.

J’ai tenter de répondre en tans qu’utilisateur lambda, non dev, et non codeur sur ce problème récurent depuis des mois sans réele solution viable a long terme …
Et je me suis fait simplement " censurer " ( dsl j’appel un chat un chat ) puisque mon message poli et courtois s’est fait signaler comme " HORS SUJET " alors que ce n’est pas du tout le cas !

J’ai l’impression que les critiques constructives ne sont plus acceptées de nos jours sur le net :frowning:

J’abandonne donc l’idée de trouver de l’aide ici ou au moins de l’ecoute de la part des personnes plus compétentes que moi et je vais continuer de me débrouiller tout seul :frowning:

@Aurelien

Je suis parfaitement d’accord avec toi !
Mais on est pas tous dev ou codeur … et l’IA permet aux néophites de comprendre un peu mieux l’utilisation de jeedom et certaines problématiques qui nous échappe !

Et même si ce genre de post horripile surement Linus Torvalds … je suis pratiquement sur qu’il est conscient que cela peut être un outils intéressant et surtout, que ceux qui tentent de l’utiliser correctement ne méritent pas de se faire rembarrer de cette façon !

( et encore moins de se faire censurer sans aucun motif vallable ! )

Tu es complètement hors sujet oui.
Et tu ne fais aucune critique constructive.

Tu pars en délire dans tous les sens (comme tout tes posts) sur

  • des problèmes sur un autre plugin (mcpia)
  • python à downgrade ? ? Ca n’a jamais jamais jamais été demandé sur ce forum, au contraire!
  • les plugins non mis à jour/ maintenu; ce n’est pas le cas ici
  • le fait que t’es pas dev et qu’on demande de lire du code? ? Quel rapport? Ca n’a jamais été demandé!

Le sujet concerne le plugin proxmox pour lequel une liste d’informations est clairement décrite dans la documentation et aucune de ces infos n’est fournies

Le sujet n’est pas un débat sur l’utilisation de l’ia, ia dont je me servirai si j’en ai besoin, donc merci de ne pas venir polluer le post.
Je m’en fiche que les utilisateurs ne soient pas dev, c’est pas ce que je leur demande!

Ce n’était pas un bon usage ici!

Les motifs ont été énoncés ci dessus, tout nouveau post alimentant ce débat sera supprimé.

Je ne souhaitais certainement pas provoquer un tel débat. En revanche je voulais signaler que le plugin PROXMOX, chez moi, a une consommation mémoire en constante augmentation m’obligeant à le stopper et relancer régulièrement. Sur la solution, je laisse l’auteur du plugin décider librement s’il veut en tenir compte.

Donc faites en bien ce que vous voulez. En attendant, j’ai aussi un problème sur le plugin ATV que Claude AI m’a corrigé. Mais je me garder bien de dire ce qui a été corrigé pour ne pas risquer un nouveau déchaînement de haters.

De toute manière j’ai bien compris, qu’à part des spécialistes de plus en plus susceptibles, les néophytes n’avaient pas le droit à la parole sur ce forum. Mon projet en cours est désormais une migration progressive vers HomeAssistant (merci Claude IA).

C’est pas une question de « spécialistes », plutôt que dans le fond tu n’as fait que poster un texte rédigé par une IA sans aucun contexte autour. Je fais sûrement parti de l’ancienne école mais personnellement à force je suis dans moins en moins enclin à répondre à une demande entièrement rédigée par IA quelle que soit la situation… Et je pense que ce sera partout pareil, dans ce cas autant faire rédiger la réponse par une IA aussi et elle ne feront que se parler entre elles finalement, plus d’humain dans l’histoire pas sûr que ça avance vraiment même si ça fait de longues phrases mais c’est peut être ce que l’avenir nous réserve.

On fait tous des erreurs perceptibles ou imperceptibles mais le tout est de savoir se mettre à la place de son interlocuteur et comprendre son point de vue aussi. Et j’avoues que je commence à en avoir marre de ses débats stériles autour de l’IA : oui c’est génial et fait gagner beaucoup de temps quand bien utilisé dans son cadre de compétences sinon ça ne fait qu’enlever tout rapport humain sans bénéfice à l’arrivée.

Hello,

Je pense que tu mélanges un peu tout. La réponse de @Mips était sur la forme et pas sur le fond.
Je ne pense pas que quelqu’un ait dit que les plugins étaient parfaits, qu’il n’y avait aucune amélioration / correction possible.
Ce qui est reproché ici n’est pas de s’être aidé de l’IA (je pense qu’on le fait à un moment donné un peu tous) mais d’être allé jusqu’a copié/coller directement l’analyse de ce dernier quasiment tel quel sans donner ton avis, ta patte ou ton analyse personnelle.

Et à un moment oui je comprends qu’une IA te pond un pavé et que t’a pas forcément envie de lire en détail points par points pour vérifier si c’est réel, acté, à corriger …
La où un humain irait directement à l’essentiel, l’IA est capable de te broder tout un discours, pas forcément vrai et pas forcément rapide à lire. Et donc oui je comprends qu’on ait pas envie en tant que dev de lire des CR d’une IA qui n’a pas été analysée par un humain. Se faire aider d’une IA pourquoi pas, poster tel quel le CR de cette dernière, la je partage le point de vue de @Mips …

C’est ton interprétation. Personne n’a dit ça.

Aller c’est reparti bah va voir si l’herbe est plus verte ailleurs qu’est ce que tu veux … On va pas te retenir.

Par contre je ne suis pas certain que les développeurs de HA traitent avec un grand enthousiasme les rapports d’analyse de leurs plugins générés par une IA …
Je ne vois pas en quoi ça changerait par rapport à Jeedom mais bon … :person_shrugging:

@Aurel a parfaitement compris et détaillé mon opinion. Merci.

Non je n’ai même pas lu le post d’origine dès que j’ai vu que c’était de l’ia…

@xav_38 tu aurais pu juste dire:

J’ai un problème de conso mémoire, j’ai remarqué ceci et cela.
Voici les infos demandées (voir doc comme je l’ai écrit dans ma première réponse)

Et on aurait évité un gaspillage d’énergies en consommant de l’ia sans en avoir besoin…
Si lors de mes investigations j’ai besoin de l’ia, il sera toujours temps pour moi de le faire… vous inquiétez pas, j’ai aussi des comptes et je sais l’utiliser lorsque j’en ai besoin.

Fournir un rapport ia sans même fournir les infos de bases demandées dans la doc, ca sert à rien.

en relisant le début du rapport il est écrit jeedom 4.4 donc pas à jour sur le core, donc pas à jour sur le plugin donc aucune investigation à faire avant d’être sur les dernières versions.

Ps: debian 11 est obsolète dans 1 mois et demi, faut installer debian 12 … ou pas.