J'ai simplifié au maximul mon script pour localiser l'erreur :
/* HEADER TEXT */
header('Content-Type: text/plain; charset: UTF-8');
header('Content-Disposition: attachment; filename=test.csv');
error_log('MEM USAGE 1 : '.memory_get_usage());
(qui donne 149952 bytes)
for ($i=0; $i<200000; $i++)
{
for ($j=0; $j<15; $j++)
{
echo rand();
echo ";";
}
echo "\n";
}
flush();
error_log('MEM USAGE 2 : '.memory_get_usage());
(qui donne 150072 bytes)
Donc là pas de requête PostgreSQL, pas d'allocation en RAM, juste du "echo".
Le fichier téléchargé fait 30MB
A chaque fois que je lance la page sur un navigateur WEB et télécharge le fichier généré j'ai un nouveau processus apache2 qui utilise de la mémoire et qui ne termine jamais :
top -d ,2 -U www-data :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3388 www-data 20 0 23384 5880 1728 S 0,0 1,2 0:57.44 apache2
3389 www-data 20 0 23392 5884 1728 S 0,0 1,2 0:57.03 apache2
3390 www-data 20 0 23392 5880 1732 S 0,0 1,2 0:29.83 apache2
3392 www-data 20 0 23352 5840 1732 S 0,0 1,2 0:29.83 apache2
3393 www-data 20 0 23384 5876 1728 S 0,0 1,2 1:43.94 apache2
3396 www-data 20 0 23384 5872 1728 S 0,0 1,2 0:53.93 apache2
…
Pourquoi ces processus ne se terminent pas ou ne libèrent pas leur mémoire ?
D'après moi c'est une erreur du serveur apache
Je testerai demain sur une Debian Squeeze au lieu de Wheezy
# Script simplifié
Posté par ilip . En réponse au message fuite mémoire PHP. Évalué à 1.
J'ai simplifié au maximul mon script pour localiser l'erreur :
Donc là pas de requête PostgreSQL, pas d'allocation en RAM, juste du "echo".
Le fichier téléchargé fait 30MB
A chaque fois que je lance la page sur un navigateur WEB et télécharge le fichier généré j'ai un nouveau processus apache2 qui utilise de la mémoire et qui ne termine jamais :
top -d ,2 -U www-data :
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3388 www-data 20 0 23384 5880 1728 S 0,0 1,2 0:57.44 apache2
3389 www-data 20 0 23392 5884 1728 S 0,0 1,2 0:57.03 apache2
3390 www-data 20 0 23392 5880 1732 S 0,0 1,2 0:29.83 apache2
3392 www-data 20 0 23352 5840 1732 S 0,0 1,2 0:29.83 apache2
3393 www-data 20 0 23384 5876 1728 S 0,0 1,2 1:43.94 apache2
3396 www-data 20 0 23384 5872 1728 S 0,0 1,2 0:53.93 apache2
…
Pourquoi ces processus ne se terminent pas ou ne libèrent pas leur mémoire ?
D'après moi c'est une erreur du serveur apache
Je testerai demain sur une Debian Squeeze au lieu de Wheezy