Fuite de mémoire jeeScenario.php

Bonjour à tous,

J’ai une fuite mémoire sur un scénario qui tourne en boucle et sur plugin-jmqtt :

(Le jeeScenario.php c’est mon scénario et jeeCron.php c’est le daemon de plugin-jmqtt.)

Le sénario est un bloc code et est provoqué par le déclencheur #start# :

$ip_ecocompteur = "192.168.1.251";
$url_json = "http://".$ip_ecocompteur."/inst.json";
$handler = curl_init($url_json);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, true);

while(true){
	$json_data = json_decode(curl_exec($handler), true);
	cmd::byString("#[Maison][ecoval][Total]#")->event(($json_data['data1']));
	cmd::byString("#[Maison][ecoval][Chauffage]#")->event(($json_data['data2']));
	cmd::byString("#[Maison][ecoval][Chauffe eau]#")->event(($json_data['data3']));
	cmd::byString("#[Maison][ecoval][Prises]#")->event(($json_data['data4']));
	cmd::byString("#[Maison][ecoval][Eclairages]#")->event(($json_data['data5']));
	cmd::byString("#[Maison][Prise][Rafraîchir]#")->execCmd(); //prise via plugin-kkasa
	sleep(5);
}

curl_close($handler);

J’ai vu ce post, PhP fuite mémoire, où il est question de la fonction socket_read(), cela peut-il avoir un rapport ?

Merci d’avance !

Bonjour,
Oui, c’est probable, tu utilise ton scénario comme un demon en boucle infinie, sans jamais fermer ton objet curl.
Tu devrais mettre un simple compteur dans ta boucle, et 1 fois sur 1000 ou même 10 000 tu ferme et re-ouvre la connexion curl.
Je ne connais pas ce bug du reste, il faudrait voir s’il est lié à une version spécifique de PHP ou Debian. Tu a quelles versions ?

Pas bête le compteur, je vais faire ça tout de suite, en attendant mieux !

Pour les versions :

Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
PHP 7.3.19-1~deb10u1 (cli) (built: Jul  5 2020 06:46:45) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.19, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.19-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies

Par contre j’aurai toujours le problème avec le #plugin-jmqtt

Pas forcément, si c’est la même connexion qui génère cette fuite mémoire, et que tu la ferme d’un côté, il est possible qu’elle soit fermée également de l’autre côté aussi du coup :slight_smile: