J'ai développé un plugin wordpress qui lit de gros fichiers xml personnalisés et importe les informations sous forme de types de messages personnalisés et de nombreuses méta-informations de messages. Donc, j'appelle beaucoup de transactions de base de données. Le plug-in est exécuté pendant plusieurs minutes dans un processus POST, puis abandonné sans mémoire (250 Mo).
Traquer le problème au minimum, j'ai un exemple minimal qui montre le problème. Cet exemple présente une fuite d’environ 18 kilo-octets et la somme qui en résulte est très longue au moment de l’exécution du plug-in. La requête vérifie si un article avec un titre donné existe ($title
)
echo "<p>memory: " . memory_get_usage() . "</p>";
global $wpdb;
$poststable = $wpdb->prefix."posts";
$items = $wpdb->get_results("SELECT ID FROM $poststable WHERE post_title='$title'");
unset($items);
$wpdb->flush();
echo "<p>memory: " . memory_get_usage() . "</p>";
La sortie est mémoire: 80777008 mémoire: 80795376, la différence est donc d'environ 18 kilo-octets. Où sont ces octets? Bien qu'il s'agisse d'une petite quantité de mémoire, il totalise plusieurs centaines de mégaoctets.
Merci! Chris
@IlmarsL: merci! Je n'ai vraiment pas pensé à cela. J'avais le plugin Query Monitor activé et c'était le problème ... Désactiver Query Monitor a résolu le problème et la mémoire n'a plus augmenté.