tthma / homebridge-linky-enedis-meter

MIT License
8 stars 1 forks source link

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory` #15

Closed tthma closed 1 year ago

tthma commented 1 year ago

Petit retour, j'ai cette erreur après un certain temps : `<--- Last few GCs --->

[140:0x52cee40] 678354 ms: Scavenge 886.6 (961.9) -> 884.2 (964.4) MB, 12.0 / 0.0 ms (average mu = 0.971, current mu = 0.939) allocation failure; [140:0x52cee40] 678428 ms: Scavenge 889.1 (964.4) -> 886.7 (967.2) MB, 12.7 / 0.0 ms (average mu = 0.971, current mu = 0.939) allocation failure; [140:0x52cee40] 678658 ms: Mark-sweep 891.7 (967.2) -> 889.0 (973.2) MB, 169.5 / 0.0 ms (average mu = 0.950, current mu = 0.866) allocation failure; scavenge might not succeed

<--- JS stacktrace --->

FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory`

Je précise que j'ai un raspberry pi 4 avec 4go de RAM donc bon... j'ai essayé de réduire la date de départ mais toujours cela

Originally posted by @Gabin85 in https://github.com/tthma/homebridge-linky-enedis-meter/issues/14#issuecomment-1701360235

tthma commented 1 year ago

Avez vous laisser à 1min le temps de boucle ?

Peut être l'augmenter aussi le raspbery n'a peut être pas le temps de vider la mémoire.

Et comme de toute façon on a les données de la veille au lendemain toute les minutes sont pas nécessaires (j'avais mis une minutes pour quand on a un an de donnée à charger que ça prenne pas 20ans)

Gabin85 commented 1 year ago

Je l'ai laissé plusieurs minutes travaillé, j'ai déjà supprimé le json tout à l'heure pour justement essayer de refaire un fichier tout neuf, j'attends de voir ce que ça donne, le plugin travail là

tthma commented 1 year ago

Voir en mettant 5min de boucle et en rafraîchissant les données dans eve toute les 5min SANS appuyer sur réinitialiser les valeurs je pense que c'est ça qui met le bazar

tthma commented 1 year ago

Je l'ai laissé plusieurs minutes travaillé, j'ai déjà supprimé le json tout à l'heure pour justement essayer de refaire un fichier tout neuf, j'attends de voir ce que ça donne, le plugin travail là

Mais je comprend pas si ça fonctionne correctement. Vous avez mis 01/08/2023 Il cherche les infos semaine par semaine donc en 4-5 min c'est réglé vous devriez avoir toute vos données depuis début août.

tthma commented 1 year ago

Alors ?

tthma commented 1 year ago

Bon bas je prend ça comme un résolu je vais clore le ticket

Gabin85 commented 1 year ago

Excuse moi, non le problème n’est pas résolue, toujours pareil, j’étais pas mal occupé, j’ai oublié de répondre et je ne me suis pas repenche dessus

tthma commented 1 year ago

Ok je vais voir pour faire une maj pour les config déjà surchargé pour ajouter dans les paramètres de config une mémoire tampon plus petite Je vais faire ça demain si j'ai le temps

tthma commented 1 year ago

Je peux avoir le fichier config et la dernière erreur dans les logs svp ?

Gabin85 commented 1 year ago

Oui, je t’envoie ça une fois chez moi après le message d’erreur tu l’as au debut du fil

Gabin85 commented 1 year ago

[ { "accessory": "EnergyMeter", "firstDateRecord": "2023-01-02T15:24:00Z", "update_interval": 60000, "usagePointId": "", "name": "Linky Meter", "accessToken": "" } ]

tthma commented 1 year ago

image

Je viens de charger depuis 01/01/2022.

Soit plus d'un an de donnée sans aucun problème de heap.

Je pense qu'il y'a trop de truc qui tourne sur votre raspbery et ça fait peter un plomb au plugin.

Je vais voir pour réduire au maximum la mémoire utilisé par le plugin et ajouter un paramètre pour la mémoire tampon de l'historique.

En attendant je crois qu'il y a une ligne de commande pour augmenter la mémoire allouée à un node.js quand il y a des problèmes de heap Java justement même si c'est pas forcément une solution ça peut dépanner.

Gabin85 commented 1 year ago

Je vais essayer d’éteindre tout mes autres conteneurs ce soir si tu n’as pas encore sorti la mise à jour

Gabin85 commented 1 year ago

IMG_4979

mais sur Eve ça ne se met plus à jour

tthma commented 1 year ago

J'aurais pas le temps de sortir une maj avant la semaine prochaine.

1° supprimer manuellement toute les mesures dans Eve. y a une option tout supprimer dans mesure

2° fermer eve m.

3° changer la date dans le fichier config de homebridge (rajouter un jour par exemple) Le plugin va détecter un changement de date et reprendre depuis le début.

4° restart homebridge.

5° retourner dans eve et swipe de haut en bas dans l'accessoire linky pour forcer la maj des données

Gabin85 commented 1 year ago

Je viens d’essayer en éteignant tout mes autres conteneurs, j’attends maintenant

Gabin85 commented 1 year ago

Pour l’instant il a déjà chargé 1 mois si j’en crois les logs

tthma commented 1 year ago

Il faut bien spam le swipe haut en bas dans eve pour ne pas avoir des trous dans les données si il y a bcp a récupérer

Gabin85 commented 1 year ago

IMG_4067

C’est un echec

tthma commented 1 year ago

J'ai trouvé ça sur un forum

"HomeBridge Settings > Environmental Variables > NODE_OPTIONS: I added --max_old_space_size=512"

Pareil un gars qui avait cet erreur comme ça du jour au lendemain.

512 c'est la valeur par défaut On peut l'augmenter pour tester en attendant que je fasse une maj ou qu'on trouve d'où viens le problème. (C'est des multiple à chaque fois) "node --max-old-space-size=1024 index.js #increase to 1gb node --max-old-space-size=2048 index.js #increase to 2gb node --max-old-space-size=3072 index.js #increase to 3gb node --max-old-space-size=4096 index.js #increase to 4gb node --max-old-space-size=5120 index.js #increase to 5gb node --max-old-space-size=6144 index.js #increase to 6gb node --max-old-space-size=7168 index.js #increase to 7gb node --max-old-space-size=8192 index.js #increase to 8gb "

Essayez avec 512 pour commencer voir si ça change quelque chose. Quel version de homebridge vous avez ? Je suis en 1.5.0 de mon côté.

Gabin85 commented 1 year ago

D’accord j’essaye ça une fois devant le PC mais je suis en 1.6.1 perso

Gabin85 commented 1 year ago

`root@raspberrypi:/var/lib/homebridge $ node --max-old-space-size=512 index.js node:internal/modules/cjs/loader:1080 throw err; ^

Error: Cannot find module '/homebridge/index.js' at Module._resolveFilename (node:internal/modules/cjs/loader:1077:15) at Module._load (node:internal/modules/cjs/loader:922:27) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:23:47 { code: 'MODULE_NOT_FOUND', requireStack: [] }

Node.js v18.17.1 root@raspberrypi:/var/lib/homebridge $ ^C root@raspberrypi:/var/lib/homebridge $ ls accessories bwp91_cache homebridge.log persist auth.json config.json node_modules plugin-persist backups core package.json startup.sh root@raspberrypi:/var/lib/homebridge $ `

Ne fonctionne pas, je vais chercher voir si je trouve quelque chose

tthma commented 1 year ago

image

Il faut rentrer ici sur la photo

--max_old_space_size=512

Gabin85 commented 1 year ago

Oui, c'est ce que je viens de trouver, j'ai essayé, j'attends voir si ça plante, merci en tout cas !

Gabin85 commented 1 year ago

J'y pense pendant que ça charge, est ce que toi ton relevé de compteur est quotidien ou toutes les heures ?

tthma commented 1 year ago

L'api EDF Enedis ne renvoie les données que la veille pour le lendemain.

C'est pas du temps réel ou heure par heure.

En gros le jour même vous aurez les données de la veille.

Après si ils se mettent à faire du temps réel j'adapterai le code.

Là pour que ça soit fiable je prend la donnée du jour (une donnée par 1/2heure) et je rentre artificiellement la donnee toute les dix minutes pour avoir des courbes lisse et pas de trou dans le graphique

Gabin85 commented 1 year ago

OKAY, s'était pour savoir car je sais que pour avoir le relevé toutes les heures faut l'activer chez ENEDIS ou notre fournisseur d'elec..

Et j'ai essayé avec 512 et 1024, toujours pareil

tthma commented 1 year ago

Bas alors là je vois pas du tout d'où ça viens. Peut être une mise à jour de node.js que j'ai pas. Je regarderai la semaine prochaine en mettant à jour mon homebridge à la dernière version.

Le problème c'est que quand je debug sur mon pc j'ai 64go de ram donc pas vraiment de problème de heap.

sur mon raspbery j'ai 4Go mais pas de problème.

La carte sd n'est t'elle pas pleine ?

Je vais voir pour faire une maj en incluant Google drive aussi.

M'en occupe semaine prochaine.

Mais là je ne vois vraiment pas d'où ça viens.

Gabin85 commented 1 year ago

j'ai lancé à 2048, d'après OMV, Homebridge prend déjà 1giga de RAM

Gabin85 commented 1 year ago

Il semble aller plus loin si j'en crois les logs mais je ne suis qu'en mars et déjà à 1,47 Go de RAM

tthma commented 1 year ago

Je sais pas ce que c'est omv.

Par défaut fakegato donne 4092 en mémoire tampon

Il faut swipe dans eve pour mettre à jour les données pendant la récupération de données sur homebridge pour vider au fur et a mesure.

Après au pire du pire juste pour essayer mettez la date du jour ou de la veille vous aurez pas d'historique de data avant mais au moins y'aura pas de problème de heap vue que vous récupérez les datas au fur et à mesure

Gabin85 commented 1 year ago

Ça semble fonctionner, juste sur EVE je n'ai rien avant le 24 avril alors que normalement j'ai mis 1 janvier, mais bon on ne va pas chipoter...

tthma commented 1 year ago

C'est ce que je disais plus haut. Si vous swipez pas comme un dingue dans eve pour forcer la mise à jour des données dans l'accessoire. Une fois que la mémoire tampon est pleine dans le fichier d'historique il écrase au fur et à mesure les données donc si elle sont pas remonté dans eve elles disparaissent. Ça c'est valable quand vous charger un gros historique parce que quand c'est dur jour le jour y a moins de données donc pas d'écrasement. Mais quand la date initial au lancement est éloigné faut swipe pour remonter les données dans eve pour pas qu'elles disparaissent au fur et à mesure qu'il récupère de la data

tthma commented 1 year ago

Pour plus de facilité j'aurais pas du laisser le choix à l'utilisateur de saisir de date mais j'aimais bien l'idée de pouvoir charger une année entière de data.

Gabin85 commented 1 year ago

Ah d’accord je comprends mieux, j’avais compris le contraire justement, qu’il ne fallait pas charger les données dans EVE tant que s’était pas terminé…

il faudrait le mettre en évidence avec un ATTENTION dans les réglages du plugin je pense

Gabin85 commented 1 year ago

IMG_4989 Le plugin a terminé mais il manque aujourd’hui 🥲

tthma commented 1 year ago

image

Moi aussi c'est normal Enedis ne fournis que les données de la veille.

Mais ça permet d'avoir un visu quand même.Même avec un jour de décalage.

tthma commented 1 year ago

Après plusieurs jour sans problème je vais clore ce ticket