Comment 2 for bug 1677578

Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

apt-get install lighttpd php7.0-cgi
sudo lighttpd-enable-mod fastcgi fastcgi-php

Repro php leaking ~50MB each time at /var/www/html/index.php
<?php
   header("Content-Type: text/plain");
   ini_set('max_execution_time', 3);
   for ($i = 0; $i<100; $i++){
      $a[$i] = array_fill(0, 16384, '1234567890-foobar');
   }
   echo "Leaking " . memory_get_usage() . "\n";
   #busy wait until killed, and consume execution time (so no sleep)
   $st_tm = time();
   $diff=0;
   while (1){
     if ((time() - $st_tm) > $diff) {
             $diff=(time() - $st_tm);
             echo "Waiting to Die " . date('h:i:s') . "\n";
             flush();
     }
   }
?>

Track consumption and trigger it 5 times:
$ apt install smem
$ smem | grep www
$ for i in $(seq 1 5); do wget http://127.0.0.1/index.php; done
$ smem | grep www

Pre:
19338 www-data /usr/bin/php-cgi 0 44 969 5164
19339 www-data /usr/bin/php-cgi 0 44 969 5164
19340 www-data /usr/bin/php-cgi 0 44 969 5164
19341 www-data /usr/bin/php-cgi 0 44 969 5164
19336 www-data /usr/sbin/lighttpd -f /etc/ 0 1244 1309 2400
19337 www-data /usr/bin/php-cgi 0 16548 17772 23392

Post:
19336 www-data /usr/sbin/lighttpd -f /etc/ 0 1544 1601 2764
19337 www-data /usr/bin/php-cgi 0 15564 17113 23216
19339 www-data /usr/bin/php-cgi 0 40432 41522 47184
19340 www-data /usr/bin/php-cgi 0 40432 41522 47184
19341 www-data /usr/bin/php-cgi 0 40432 41522 47184
19338 www-data /usr/bin/php-cgi 0 40456 41886 47872

Ok, that is a rise, still the same processes.
Lets speed that up a bit
- modify wget loop to be async:
for i in $(seq 1 100); do (wget http://127.0.0.1/index.php &); done
And run a few of them

Post:
19336 www-data /usr/sbin/lighttpd -f /etc/ 0 1908 1965 3128
19337 www-data /usr/bin/php-cgi 0 13204 14371 19800
19339 www-data /usr/bin/php-cgi 0 53884 54746 59540
19340 www-data /usr/bin/php-cgi 0 53900 54813 59752
19338 www-data /usr/bin/php-cgi 0 53900 54985 60268
19341 www-data /usr/bin/php-cgi 0 53888 55006 60324

No matter what I do it doesn't rise over ~60MB per worker thread.
I'd assume that is some smart caching/heap-reuse in place.
The same is True for Ubuntu 16.04 and 17.04 so no new fix or such - just always as that.

Is your case exceeding the system to crash at some point?
How many cgi-bin processes do you have and what memory do they consume?