alexp
Décembre 12, 2020, 10:07
1
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 !
pifou
Décembre 12, 2020, 9:55
2
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 ?
alexp
Décembre 12, 2020, 10:59
3
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 …
pifou
Décembre 13, 2020, 9:51
4
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