Creare Memory Leak con PHP

(Troppo) Spesso quando uno dei nostri server web (Apache) ha problemi il ditino viene puntato sugli sviluppatori imputando alle loro applicazioni fantomatici memory leak.
Convinto che la ragione sia sempre nel mezzo ho deciso di scrivere un piccolo script PHP che volutamente perde memoria.

Lo script è molto banale e consente di perdere un numero arbitrario di MB di Memoria.

define('MEMORY_LOST', 10); //Memory that will be lost (MB)
define('VERBOSE', TRUE); // Debug?
define('DATO', 'DATO+DATODATO+DATODATO+DATODATO+DATODATO+DATO');

header('Content-type: text/plain');
printf("START: ON STARTUP YOU USE %s MB \n", (memory_get_usage()/1048576) );

$play = TRUE;
while ($play) {
  $foo = new Foo();
  unset($foo);
 
  if(VERBOSE){
    echo round(memory_get_usage()/1048576 , 3) . "\n";
  }
 
  if( (memory_get_usage()/1048576) > MEMORY_LOST ){
   $play = FALSE;
  }
}
printf('STOP: YOU HAVE LOST %s MB', (memory_get_usage()/1048576) );

class Foo {
  function __construct() {
    $this->data = array_pad(array(),100, DATO );
    $this->bar = new Bar($this);
  }
}

class Bar {
  function __construct($foo = null) {
    $this->data = array_pad(array(),2000, DATO );
    $this->foo = $foo;
  }
}

Con questo script penso che sia più facile vedere gli effetti del caso poco probabile che ci mangiamo mega di memoria!!

Tags