• # Script simplifié

    Posté par . En réponse au message fuite mémoire PHP. Évalué à 1.

    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