SWAP et mémoire saturée

Bonjour,

je suis passé récemment d’un oDroid c2 (2Go de RAM) à un N4 4G (4G) et je suis surpris d’y constater des plantages et même une saturation de la mémoire.

Aujourd’hui j’ai fait une analyse en utilisant smem et je vois que c’est le processus python utilisé par XiaomiHome qui me prend une part non négligeable de la mémoire et de la SWAP. Après un restart de ce daemon, la situation redevient normale jusqu’à ce que ça recommence.

Suis-je le seul à constater ceci ? Je suis sur Jeedom 4.3 / Debian 11 / Python 3.9.

Non tu n’es pas seul.

Je crois qu’on a déjà abordé ce memory leak

Aie, je ne trouve pas la possibilité de schedule un restart de daemon en plus.

OK, trouvé : Scénario pour redémarrer un démon - #6 par sebforum29

Du coup je le fait 4 fois par jour et ca devrait faire le workaround.

Une piste à étudier :

Merci du lien, mais apparemment ce n’est pas mon cas :

# sudo journalctl --disk-usage
Archived and active journals take up 22.5M in the file system.

Bonjour,
Je confirme avoir également des soucis de consommation mémoire sur debian 11 avec ce plugin (il consommation 24% de la ram de mon pi4) …
Du coup j’ai appliqué la relance du démon toutes les 8 heures et la limitation du fichier RuntimeMaxUse a 200M. (j"ai rajouté un crontab sur le système qui nettoie une fois par semaine le journal)
En complément pour nettoyer les journaux qui faisaient 1.2 G j’ai passé la commande suivante :
sudo journalctl --vacuum-size=200M

Bonjour,
Ce n’est pas vraiment le plugin xiaomihome qui est en cause pour la consommation ram mais plutôt la version de python. J’ai également constaté des fuites mémoire avec les plugins openenocean, broadlink et rfxcom.
La ram est tout à fait stable sous debian 11 avec python en version 3.9.19.

Bonjour
Est-ce une opération simple que de passer de python 3.9.2 à 3.9.19 ?
J’ai également cette baisse régulière de la mémoire.

Merci pour ton retour

Edit :
J’avais une VM en Debian 11 et un Jeedom 4.3.23 (vide) inutilisé et j’ai fait le test.
En SSH, python3.9 --version me retourne 3.9.2
Mon Jeedom étant vide et en 4.3.23 la version de Python n’était pas affichée dans la page santé.

J’ai suivi ce tutoriel
Tout s’est bien déroulé et lorsque je saisis python3.9 – version en SSH j’obtiens bien 3.9.19

J’ai procédé à la mise à jour en 4.4.5, et là la version Python apparait bien sur la page santé, mais en 3.9.2 !!

image

Alors qu’en SSH il est bien mentionné 3.9.19

image

Idem au niveau de Jeedom

image

Quelqu’un pourrait m’expliquer ?

Quelle est la version de Python que Jeedom et ses plugins vont utiliser ?
Est-ce un bug d’affichage de la page santé ?

Merci pour vos retours

Tu dois avoir les 2 versions de python d’installées. Ca doit dépendre du PATH de ton Jeedom.

@Chrisax > tu as fais comment ton update ?

J’ai suivi le tutoriel mentionné dans mon post.
Comment pourrai-je avoir les 2 versions ?
En SSH ou depuis Administration système de Jeedom, quand je vérifie la version de Python j’ai bien 3.9.19 alors qu’auparavant j’avais 3.9.2
Tout laisse penser que la mise à jour vers 3.9.19 a été faite

1 version tar.gz et 1 version deb.

Là tu me parles chinois :frowning:
Et si je veux mettre à jour la version qu’utilise Jeedom, il y a moyen ?

Salut,

J’ai donné la procédure ici:

Mais Mips a raison: si vous ne comprenez pas les commandes, il vaut mieux garder le système en l’état.

@dan_73 tu as du zapper le lien symbolique sur /usr/bin/python3.

1 « J'aime »

Merci pour ton retour.
Effectivement dans le tutoriel que j’avais trouvé il n’était pas fait état de ce lien symbolique et que tu précises dans ta procédure.

Après quant au choix de laisser en l’état, ce n’est pas non plus le Pérou. Si il existe un moyen de stabiliser le système, autant s’appuyer sur les retours d’expériences de certains, car ce n’est pas pour jeter la pierre à qui que ce soit, mais ce n’est pas Jeedom qui donnera des directives liées à la mise à jour de l’OS.

Mais il faut reconnaître que Linux est loin d’être d’une approche simple.
Parce qu’un python 3 qui est en version 3.9.2 et un python 3.9 qui est lui aussi en 3.9.2 et tout ça dans la même distribution, il faut admettre que c’est tout sauf explicite.

Je vais continuer mes tests sur ma VM et j’aviserai.

Encore merci

T’inquiète je comprends :slight_smile: … A terme, le mieux serait d’utiliser venv pour ne pas être tributaire de la version de python de Debian…
Le côté rm de la procédure me dérange fortement, car ça veut dire que l’on casse le système de package Debian… En gros, on a python en deb pour satisfaire les dépendances, mais on le switch par un autre.

Je serait plus tenté par un backport…

https://people.debian.org/~paravoid/python-all/

Hello,

A la lecture de vos messages, je me sens vraiment moins seul.
Mon système est super stable depuis des années, et depuis le passage en debian 11 pour etre dans les clous en compatibilité officielle coté jeedom, j’ai régulièrement des process killés dans la page santé (j’ai 4go en ram).
J’ai fait le test de redemarrer le demon de xiaomihome, y’a pas photos cela me libère une ram de fou.

Je vois les manip de python, je suis pas contre mais bon je veux pas que ca me foute le bordel à côté.
Mais c’est sur que la stabilité de la ram (meme si je concois que linux aime prendre ce qui est dispo) sans kill de processus me semble primordial.

Je viens de planif un restart du demon 1 fois par jour dans un 1er temps mais bon c’est un cache misère à mes yeux.

EDIT l’historique RAM avant et après upgrade de debian 10 à 11 (le 11 mars)

J’ai résolu le probème de mon côté avec un scénario de « workaround » toutes les 6H :

// xiaomihome
xiaomihome::deamon_stop();
$scenario->setLog("xiaomihome daemon stop");
sleep(3);
xiaomihome::deamon_start();
$scenario->setLog("xiaomihome daemon start");

// rfplayer2
rfplayer2::deamon_stop();
$scenario->setLog("rfplayer2 daemon stop");
sleep(3);
rfplayer2::deamon_start();
$scenario->setLog("rfplayer2 daemon start");

Oui cest ce que je disais un restart des demons, enfin pour moi c’est cache misère de faire ça.

On a la liste complète des plugins qui utilisent Python ?

Ya vraiment pas mieux a faire en attendant ?

1 « J'aime »