Je rencontre un problème de fuite mémoire quand je fais un serializeJson dans la callback d'une xTaskCreate. Alors la mémoire ne tombe pas à 0 mais sur les 170K de ram dispo au début de l'execution, on se retrouve avec 30K apres quelques milliers d'itérations.
iteration: 0 Total Free: 270224 Minimum free: 264688 Largest free block: 118772
iteration: 100 Total Free: 254224 Minimum free: 243860 Largest free block: 118772
iteration: 200 Total Free: 238224 Minimum free: 232340 Largest free block: 110580
iteration: 300 Total Free: 222224 Minimum free: 216340 Largest free block: 110580
iteration: 400 Total Free: 206224 Minimum free: 200340 Largest free block: 110580
iteration: 500 Total Free: 190224 Minimum free: 184340 Largest free block: 110580
iteration: 600 Total Free: 174224 Minimum free: 168340 Largest free block: 110580
iteration: 700 Total Free: 158224 Minimum free: 152340 Largest free block: 110580
iteration: 800 Total Free: 142224 Minimum free: 136340 Largest free block: 110580
iteration: 900 Total Free: 126224 Minimum free: 120340 Largest free block: 110580
iteration: 1000 Total Free: 110224 Minimum free: 104340 Largest free block: 94196
iteration: 1100 Total Free: 94224 Minimum free: 88340 Largest free block: 77812
iteration: 1200 Total Free: 78224 Minimum free: 72340 Largest free block: 61428
iteration: 1300 Total Free: 62224 Minimum free: 56340 Largest free block: 38900
iteration: 1400 Total Free: 46224 Minimum free: 40340 Largest free block: 23028
iteration: 1500 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 1600 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 1700 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 1800 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 1900 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2000 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2100 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2200 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2300 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2400 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2500 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2600 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2700 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2800 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
iteration: 2900 Total Free: 30864 Minimum free: 24980 Largest free block: 4980
J'arrete de créer de nouvelles tâckes à la 2000 itération pour vérifier si la mémoire remonte toute seule si j'arrete de créer de nouvelles tâches, mais comme on voit sur le log ca reste pareil.
A noter que quand je n'utilise pas la tache mais que je serializeJson directement dans ma loop, aucune fuite mémoire.
A quoi sert de créer ces tasks ? Si ça fonctionne dans la loop, pas besoin d'en faire plus.
Sinon, la fuite mémoire est probablement dûe à la mémoire réservée pour la task, l'argument 5000 de la création de la task.
Il faudrait libérer cette mémoire après la fin de la task et la tuer avec
@lesept Merci pour ta réponse, alors en fait c'est un extrait minimisé et opérationnel pour mettre en avant l'anomalie que j'observe. Bien évidemment le code tel quel n'a pas d'utilité. Dans la réalité j'ai besoin de créer une tache pour faire une opération lente en réponse a une route serveur.
Pour info le
vTaskDelete(NULL);
est bien appelé a la fin de ma callback
Aussi autre indice: Si je fais pas de serilizeJson j'ai pas de problème avec les tâches. J'veux dire par là que tout autre opération dans le callback de tache ne crée pas de "fuite" mémoire
Haha Merci!!! @lesept Alors j'ai déjà vu tout ca et joué avec.
Mon document ne grossit pas. j'avais checké la mémoire occupée par le document dans chaque tâche et elle reste stable. J'avais essayé aussi les garbage collect et autres ca n'a pas d'effet en effet. Le clear par contre va me reinitialiser le doc pointé. Donc a la prochaine itération je ne l'aurais plus.
Sinon l'histoire connue du l'histoire de la lib json si j'ai bien compris, c'est surtout quand tu le modifie. Si tu le modifie pas ou que tu le crée a chaque fois, pas de probs normalement....
Le soucis ici c'est que le vTaskDelete a du mal à cleaner son propre contexte. En gros la mémoire de la tâche n'est pas correctement désalouée surtout quand on utilise des String et autres trucs dans le genre
Ca se corige en créeant un contexte local dans la callback
Le contexte parent reste accessible, et dans le contexte de la call back a part le sous contexte on ne laisse que le vTaskDelete(NULL). Si je comprends bien ca permet de forcer la desalocation propre de la mémoire occupée par la tâche.
Alors dans mon cas minimaliste oui le problème est réglé. Si j'ai bien identifié et circoncis l'anomalie, ca veut dire que c'est bien réglé dans mon serveur aussi, je testerais ce soir
Et la console ca donne ca maintenant:
iteration: 0 Total Free: 270224 Minimum free: 264688 Largest free block: 118772
iteration: 100 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 200 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 300 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 400 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 500 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 600 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 700 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 800 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 900 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1000 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1100 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1200 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1300 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1400 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1500 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1600 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1700 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1800 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 1900 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2000 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2100 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2200 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2300 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2400 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2500 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2600 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
iteration: 2700 Total Free: 270224 Minimum free: 259312 Largest free block: 118772
Merci pour ton aide, reformuler le problème et interagir autour avec d'autres est toujours tres prolifique =)