J’ai regardé rapidement;
Y a une raison pour laquelle tu fais un sleep toi au lieu d’utiliser ce que le core propose?
dans la daemon_start tu ajoutes qlqch du style et tu ne dois plus le faire toi, le core le fera:
$cron->setDeamonSleepTime(config::byKey('pollInterval', __CLASS__, 60);
pcq dans le code du démon du coup je vois deux problèmes avec ce bout de code (je ne dis pas que c’est la cause de la fuite):
$endtime = microtime(true);
if ($endtime - $starttime < config::byKey('pollInterval', __CLASS__, 60, true)) {
usleep(floor((config::byKey('pollInterval', __CLASS__) + $starttime - $endtime) * 1000000));
}
- la première lecture
config::byKey('pollInterval', __CLASS__, 60, true)
ok elle force le refresh en db … mais justement ca veut dire qu’à chaque run tu forces une lecture en DB ! c’est pas dingue comme idée je trouve 
- la deuxième
config::byKey('pollInterval', __CLASS__)
n’a plus de valeur par défaut donc vide donc en fait aucun interval si la config est mal/pas faite
et dans tous les cas le core va aussi faire un sleep / usleep (avec le délai par défaut sauf si tu le spécifies comme je proposais au début) donc t’es sauvé sur ce point (voir fichier core\php\jeeCron.php
vers les lignes 95-100