facebook / hhvm

A virtual machine for executing programs written in Hack.
https://hhvm.com
Other
18.16k stars 2.99k forks source link

HHVM Cyclical Garbage Collecting is broken #7345

Open RyanGordon opened 8 years ago

RyanGordon commented 8 years ago

HHVM Version

hhvm --version
HipHop VM 3.14.5 (rel)
Compiler: tags/HHVM-3.14.5-0-gc6bf714e6468213eed377527b431e9cd4cec1432
Repo schema: 9ab3fe4281c731189b558d921eb7317b0eb2b2e6
php --version
PHP 5.5.32 (cli) (built: Feb  4 2016 23:20:47) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

Standalone code, or other way to reproduce the problem

Two test scripts:

# cyclical_test.php
<?php

ini_set('memory_limit', '10G');

class Left {
   public $right;
}

class Right {
   public $left;
}

$iter = 0;
while (true) {
   $left = new Left();
   $right = new Right();
   $left->right = $right;
   $right->left = $left;
   $iter++;
   if ($iter % 1000000 === 0) {
      $formattedIter = number_format($iter, 0);
      $memoryUsage = memory_get_usage() / (1024 * 1024);
      echo "Survived {$formattedIter} iterations: {$memoryUsage}MB used\n";
   }
}

?>
# non_cyclical_test.php
<?php

ini_set('memory_limit', '10G');

class One {
   public $one = 1;
}

$iter = 0;
while (true) {
   $one = new One();
   $iter++;
   if ($iter % 1000000 === 0) {
      $formattedIter = number_format($iter, 0);
      $memoryUsage = memory_get_usage() / (1024 * 1024);
      echo "Survived {$formattedIter} iterations: {$memoryUsage}MB used\n";
   }
}

?>

Expected result

We expect memory usage to stay low and not explode:

$ /usr/bin/php cyclical_test.php
Survived 1,000,000 iterations: 1.1863784790039MB used
Survived 2,000,000 iterations: 1.2109756469727MB used
Survived 3,000,000 iterations: 1.2353897094727MB used
Survived 4,000,000 iterations: 1.2598037719727MB used
Survived 5,000,000 iterations: 1.2842178344727MB used
Survived 6,000,000 iterations: 1.3086318969727MB used
Survived 7,000,000 iterations: 1.3330459594727MB used
Survived 8,000,000 iterations: 1.3574752807617MB used
Survived 9,000,000 iterations: 1.3818740844727MB used
Survived 10,000,000 iterations: 1.4062881469727MB used
Survived 11,000,000 iterations: 1.4307022094727MB used
Survived 12,000,000 iterations: 1.4551467895508MB used
Survived 13,000,000 iterations: 1.4796981811523MB used
Survived 14,000,000 iterations: 1.5053634643555MB used
Survived 15,000,000 iterations: 1.5302047729492MB used
Survived 16,000,000 iterations: 1.5549240112305MB used
Survived 17,000,000 iterations: 1.5798873901367MB used
Survived 18,000,000 iterations: 1.6045608520508MB used
Survived 19,000,000 iterations: 1.6292953491211MB used
Survived 20,000,000 iterations: 1.653923034668MB used
Survived 21,000,000 iterations: 1.6791610717773MB used
Survived 22,000,000 iterations: 1.7042007446289MB used
Survived 23,000,000 iterations: 1.7290725708008MB used
Survived 24,000,000 iterations: 1.7536544799805MB used
Survived 25,000,000 iterations: 1.7786636352539MB used
Survived 26,000,000 iterations: 1.8034439086914MB used
Survived 27,000,000 iterations: 1.8284072875977MB used
Survived 28,000,000 iterations: 1.8535232543945MB used
Survived 29,000,000 iterations: 1.8784408569336MB used
Survived 30,000,000 iterations: 1.9027481079102MB used
Survived 31,000,000 iterations: 1.927360534668MB used
Survived 32,000,000 iterations: 1.9524154663086MB used
Survived 33,000,000 iterations: 1.9762802124023MB used
Survived 34,000,000 iterations: 2.0016708374023MB used
Survived 35,000,000 iterations: 2.025749206543MB used
Survived 36,000,000 iterations: 2.0504379272461MB used
Survived 37,000,000 iterations: 2.0751419067383MB used
Survived 38,000,000 iterations: 2.0998764038086MB used
Survived 39,000,000 iterations: 2.1247634887695MB used
Survived 40,000,000 iterations: 2.1489181518555MB used
Survived 41,000,000 iterations: 2.1744918823242MB used
Survived 42,000,000 iterations: 2.199333190918MB used
Survived 43,000,000 iterations: 2.2241287231445MB used
Survived 44,000,000 iterations: 2.2484664916992MB used
Survived 45,000,000 iterations: 2.2726669311523MB used
Survived 46,000,000 iterations: 2.297233581543MB used
Survived 47,000,000 iterations: 2.322151184082MB used
Survived 48,000,000 iterations: 2.346565246582MB used
Survived 49,000,000 iterations: 2.3715744018555MB used
Survived 50,000,000 iterations: 1.1623916625977MB used
Survived 51,000,000 iterations: 1.1868057250977MB used
Survived 52,000,000 iterations: 1.2114181518555MB used
Survived 53,000,000 iterations: 1.2367172241211MB used
Survived 54,000,000 iterations: 1.2617568969727MB used
Survived 55,000,000 iterations: 1.286491394043MB used
Survived 56,000,000 iterations: 1.3120040893555MB used
Survived 57,000,000 iterations: 1.3371047973633MB used
Survived 58,000,000 iterations: 1.3626480102539MB used
Survived 59,000,000 iterations: 1.3877182006836MB used
Survived 60,000,000 iterations: 1.4123916625977MB used
Survived 61,000,000 iterations: 1.4376449584961MB used
Survived 62,000,000 iterations: 1.4625015258789MB used
Survived 63,000,000 iterations: 1.4873580932617MB used
Survived 64,000,000 iterations: 1.5118179321289MB used
Survived 65,000,000 iterations: 1.5366897583008MB used
Survived 66,000,000 iterations: 1.5615768432617MB used
Survived 67,000,000 iterations: 1.5861434936523MB used
Survived 68,000,000 iterations: 1.6105117797852MB used
Survived 69,000,000 iterations: 1.6356430053711MB used
Survived 70,000,000 iterations: 1.6600570678711MB used
Survived 71,000,000 iterations: 1.6847763061523MB used
^C
$ qhhvm non_cyclical_test.php
Survived 1,000,000 iterations: 2MB used
Survived 2,000,000 iterations: 2MB used
Survived 3,000,000 iterations: 2MB used
Survived 4,000,000 iterations: 2MB used
Survived 5,000,000 iterations: 2MB used
Survived 6,000,000 iterations: 2MB used
Survived 7,000,000 iterations: 2MB used
Survived 8,000,000 iterations: 2MB used
Survived 9,000,000 iterations: 2MB used
Survived 10,000,000 iterations: 2MB used
Survived 11,000,000 iterations: 2MB used
Survived 12,000,000 iterations: 2MB used
Survived 13,000,000 iterations: 2MB used
Survived 14,000,000 iterations: 2MB used
Survived 15,000,000 iterations: 2MB used
Survived 16,000,000 iterations: 2MB used
Survived 17,000,000 iterations: 2MB used
Survived 18,000,000 iterations: 2MB used
Survived 19,000,000 iterations: 2MB used
Survived 20,000,000 iterations: 2MB used
Survived 21,000,000 iterations: 2MB used
Survived 22,000,000 iterations: 2MB used
Survived 23,000,000 iterations: 2MB used
Survived 24,000,000 iterations: 2MB used
Survived 25,000,000 iterations: 2MB used
Survived 26,000,000 iterations: 2MB used
Survived 27,000,000 iterations: 2MB used
Survived 28,000,000 iterations: 2MB used
Survived 29,000,000 iterations: 2MB used
Survived 30,000,000 iterations: 2MB used
Survived 31,000,000 iterations: 2MB used
Survived 32,000,000 iterations: 2MB used
Survived 33,000,000 iterations: 2MB used
Survived 34,000,000 iterations: 2MB used
Survived 35,000,000 iterations: 2MB used
Survived 36,000,000 iterations: 2MB used
Survived 37,000,000 iterations: 2MB used
Survived 38,000,000 iterations: 2MB used
Survived 39,000,000 iterations: 2MB used
Survived 40,000,000 iterations: 2MB used
Survived 41,000,000 iterations: 2MB used
Survived 42,000,000 iterations: 2MB used
Survived 43,000,000 iterations: 2MB used
Survived 44,000,000 iterations: 2MB used
Survived 45,000,000 iterations: 2MB used
Survived 46,000,000 iterations: 2MB used
Survived 47,000,000 iterations: 2MB used
Survived 48,000,000 iterations: 2MB used
Survived 49,000,000 iterations: 2MB used
Survived 50,000,000 iterations: 2MB used
Survived 51,000,000 iterations: 2MB used
Survived 52,000,000 iterations: 2MB used
Survived 53,000,000 iterations: 2MB used
Survived 54,000,000 iterations: 2MB used
Survived 55,000,000 iterations: 2MB used
Survived 56,000,000 iterations: 2MB used
Survived 57,000,000 iterations: 2MB used
Survived 58,000,000 iterations: 2MB used
Survived 59,000,000 iterations: 2MB used
Survived 60,000,000 iterations: 2MB used
Survived 61,000,000 iterations: 2MB used
Survived 62,000,000 iterations: 2MB used
Survived 63,000,000 iterations: 2MB used
Survived 64,000,000 iterations: 2MB used
Survived 65,000,000 iterations: 2MB used
Survived 66,000,000 iterations: 2MB used
Survived 67,000,000 iterations: 2MB used
Survived 68,000,000 iterations: 2MB used
Survived 69,000,000 iterations: 2MB used
Survived 70,000,000 iterations: 2MB used
Survived 71,000,000 iterations: 2MB used
Survived 72,000,000 iterations: 2MB used
Survived 73,000,000 iterations: 2MB used
Survived 74,000,000 iterations: 2MB used
Survived 75,000,000 iterations: 2MB used
Survived 76,000,000 iterations: 2MB used
Survived 77,000,000 iterations: 2MB used
Survived 78,000,000 iterations: 2MB used
Survived 79,000,000 iterations: 2MB used
Survived 80,000,000 iterations: 2MB used
Survived 81,000,000 iterations: 2MB used
Survived 82,000,000 iterations: 2MB used
Survived 83,000,000 iterations: 2MB used
Survived 84,000,000 iterations: 2MB used
Survived 85,000,000 iterations: 2MB used
Survived 86,000,000 iterations: 2MB used
Survived 87,000,000 iterations: 2MB used
Survived 88,000,000 iterations: 2MB used
Survived 89,000,000 iterations: 2MB used
Survived 90,000,000 iterations: 2MB used
Survived 91,000,000 iterations: 2MB used
Survived 92,000,000 iterations: 2MB used
Survived 93,000,000 iterations: 2MB used
Survived 94,000,000 iterations: 2MB used
Survived 95,000,000 iterations: 2MB used
^C
$ /usr/bin/php non_cyclical_test.php
Survived 1,000,000 iterations: 0.22219848632812MB used
Survived 2,000,000 iterations: 0.22237396240234MB used
Survived 3,000,000 iterations: 0.22237396240234MB used
Survived 4,000,000 iterations: 0.22237396240234MB used
Survived 5,000,000 iterations: 0.22237396240234MB used
Survived 6,000,000 iterations: 0.22237396240234MB used
Survived 7,000,000 iterations: 0.22237396240234MB used
Survived 8,000,000 iterations: 0.22237396240234MB used
Survived 9,000,000 iterations: 0.22237396240234MB used
Survived 10,000,000 iterations: 0.22237396240234MB used
Survived 11,000,000 iterations: 0.22237396240234MB used
Survived 12,000,000 iterations: 0.22237396240234MB used
Survived 13,000,000 iterations: 0.22237396240234MB used
Survived 14,000,000 iterations: 0.22237396240234MB used
Survived 15,000,000 iterations: 0.22237396240234MB used
Survived 16,000,000 iterations: 0.22237396240234MB used
Survived 17,000,000 iterations: 0.22237396240234MB used
Survived 18,000,000 iterations: 0.22237396240234MB used
Survived 19,000,000 iterations: 0.22237396240234MB used
Survived 20,000,000 iterations: 0.22237396240234MB used
Survived 21,000,000 iterations: 0.22237396240234MB used
Survived 22,000,000 iterations: 0.22237396240234MB used
Survived 23,000,000 iterations: 0.22237396240234MB used
Survived 24,000,000 iterations: 0.22237396240234MB used
Survived 25,000,000 iterations: 0.22237396240234MB used
Survived 26,000,000 iterations: 0.22237396240234MB used
Survived 27,000,000 iterations: 0.22237396240234MB used
Survived 28,000,000 iterations: 0.22237396240234MB used
Survived 29,000,000 iterations: 0.22237396240234MB used
Survived 30,000,000 iterations: 0.22237396240234MB used
Survived 31,000,000 iterations: 0.22237396240234MB used
Survived 32,000,000 iterations: 0.22237396240234MB used
Survived 33,000,000 iterations: 0.22237396240234MB used
Survived 34,000,000 iterations: 0.22237396240234MB used
Survived 35,000,000 iterations: 0.22237396240234MB used
Survived 36,000,000 iterations: 0.22237396240234MB used
Survived 37,000,000 iterations: 0.22237396240234MB used
Survived 38,000,000 iterations: 0.22237396240234MB used
Survived 39,000,000 iterations: 0.22237396240234MB used
Survived 40,000,000 iterations: 0.22237396240234MB used
Survived 41,000,000 iterations: 0.22237396240234MB used
Survived 42,000,000 iterations: 0.22237396240234MB used
Survived 43,000,000 iterations: 0.22237396240234MB used
Survived 44,000,000 iterations: 0.22237396240234MB used
Survived 45,000,000 iterations: 0.22237396240234MB used
Survived 46,000,000 iterations: 0.22237396240234MB used
Survived 47,000,000 iterations: 0.22237396240234MB used
Survived 48,000,000 iterations: 0.22237396240234MB used
Survived 49,000,000 iterations: 0.22237396240234MB used
Survived 50,000,000 iterations: 0.22237396240234MB used
Survived 51,000,000 iterations: 0.22237396240234MB used
Survived 52,000,000 iterations: 0.22237396240234MB used
Survived 53,000,000 iterations: 0.22237396240234MB used
Survived 54,000,000 iterations: 0.22237396240234MB used
Survived 55,000,000 iterations: 0.22237396240234MB used
Survived 56,000,000 iterations: 0.22237396240234MB used
Survived 57,000,000 iterations: 0.22237396240234MB used
Survived 58,000,000 iterations: 0.22237396240234MB used
Survived 59,000,000 iterations: 0.22237396240234MB used
Survived 60,000,000 iterations: 0.22237396240234MB used
Survived 61,000,000 iterations: 0.22237396240234MB used
Survived 62,000,000 iterations: 0.22237396240234MB used
Survived 63,000,000 iterations: 0.22237396240234MB used
Survived 64,000,000 iterations: 0.22237396240234MB used
Survived 65,000,000 iterations: 0.22237396240234MB used
Survived 66,000,000 iterations: 0.22237396240234MB used
Survived 67,000,000 iterations: 0.22237396240234MB used
Survived 68,000,000 iterations: 0.22237396240234MB used
Survived 69,000,000 iterations: 0.22237396240234MB used
Survived 70,000,000 iterations: 0.22237396240234MB used
Survived 71,000,000 iterations: 0.22237396240234MB used
Survived 72,000,000 iterations: 0.22237396240234MB used
Survived 73,000,000 iterations: 0.22237396240234MB used
Survived 74,000,000 iterations: 0.22237396240234MB used
Survived 75,000,000 iterations: 0.22237396240234MB used
Survived 76,000,000 iterations: 0.22237396240234MB used
Survived 77,000,000 iterations: 0.22237396240234MB used
Survived 78,000,000 iterations: 0.22237396240234MB used
Survived 79,000,000 iterations: 0.22237396240234MB used
Survived 80,000,000 iterations: 0.22237396240234MB used
Survived 81,000,000 iterations: 0.22237396240234MB used
Survived 82,000,000 iterations: 0.22237396240234MB used
Survived 83,000,000 iterations: 0.22237396240234MB used
Survived 84,000,000 iterations: 0.22237396240234MB used
Survived 85,000,000 iterations: 0.22237396240234MB used
Survived 86,000,000 iterations: 0.22237396240234MB used
Survived 87,000,000 iterations: 0.22237396240234MB used
Survived 88,000,000 iterations: 0.22237396240234MB used
Survived 89,000,000 iterations: 0.22237396240234MB used
Survived 90,000,000 iterations: 0.22237396240234MB used
Survived 91,000,000 iterations: 0.22237396240234MB used
Survived 92,000,000 iterations: 0.22237396240234MB used
Survived 93,000,000 iterations: 0.22237396240234MB used
Survived 94,000,000 iterations: 0.22237396240234MB used
Survived 95,000,000 iterations: 0.22237396240234MB used
Survived 96,000,000 iterations: 0.22237396240234MB used
Survived 97,000,000 iterations: 0.22237396240234MB used
^C

Actual result

What we actually see is that memory usage continuously increases under HHVM, until the kernel kills the process:

$ qhhvm cyclical_test.php
Survived 1,000,000 iterations: 92MB used
Survived 2,000,000 iterations: 184MB used
Survived 3,000,000 iterations: 276MB used
Survived 4,000,000 iterations: 368MB used
Survived 5,000,000 iterations: 460MB used
Survived 6,000,000 iterations: 550MB used
Survived 7,000,000 iterations: 642MB used
Survived 8,000,000 iterations: 734MB used
Survived 9,000,000 iterations: 826MB used
Survived 10,000,000 iterations: 916MB used
Survived 11,000,000 iterations: 1008MB used
Survived 12,000,000 iterations: 1100MB used
Survived 13,000,000 iterations: 1192MB used
Survived 14,000,000 iterations: 1284MB used
Survived 15,000,000 iterations: 1374MB used
Survived 16,000,000 iterations: 1466MB used
Survived 17,000,000 iterations: 1558MB used
Survived 18,000,000 iterations: 1650MB used
Survived 19,000,000 iterations: 1740MB used
Survived 20,000,000 iterations: 1832MB used
Survived 21,000,000 iterations: 1924MB used
Survived 22,000,000 iterations: 2016MB used
Survived 23,000,000 iterations: 2108MB used
Survived 24,000,000 iterations: 2198MB used
Survived 25,000,000 iterations: 2290MB used
Survived 26,000,000 iterations: 2382MB used
Survived 27,000,000 iterations: 2474MB used
Survived 28,000,000 iterations: 2564MB used
Survived 29,000,000 iterations: 2656MB used
Survived 30,000,000 iterations: 2748MB used
Survived 31,000,000 iterations: 2840MB used
Survived 32,000,000 iterations: 2932MB used
Survived 33,000,000 iterations: 3022MB used
Survived 34,000,000 iterations: 3114MB used
Survived 35,000,000 iterations: 3206MB used
Survived 36,000,000 iterations: 3298MB used
Survived 37,000,000 iterations: 3388MB used
Survived 38,000,000 iterations: 3480MB used
Survived 39,000,000 iterations: 3572MB used
Survived 40,000,000 iterations: 3664MB used
Survived 41,000,000 iterations: 3756MB used
Survived 42,000,000 iterations: 3846MB used
Survived 43,000,000 iterations: 3938MB used
Survived 44,000,000 iterations: 4030MB used
Survived 45,000,000 iterations: 4122MB used
Survived 46,000,000 iterations: 4212MB used
Killed

Even with the (undocumented) garbage collector turned on, it still explodes

$ qhhvm -vEval.EnableGC=1 cyclical_test.php
Survived 1,000,000 iterations: 92MB used
Survived 2,000,000 iterations: 184MB used
Survived 3,000,000 iterations: 276MB used
Survived 4,000,000 iterations: 368MB used
Survived 5,000,000 iterations: 460MB used
Survived 6,000,000 iterations: 550MB used
Survived 7,000,000 iterations: 642MB used
Survived 8,000,000 iterations: 734MB used
Survived 9,000,000 iterations: 826MB used
Survived 10,000,000 iterations: 916MB used
Survived 11,000,000 iterations: 1008MB used
Survived 12,000,000 iterations: 1100MB used
Survived 13,000,000 iterations: 1192MB used
Survived 14,000,000 iterations: 1284MB used
Survived 15,000,000 iterations: 1374MB used
Survived 16,000,000 iterations: 1466MB used
Survived 17,000,000 iterations: 1558MB used
Survived 18,000,000 iterations: 1650MB used
Survived 19,000,000 iterations: 1740MB used
Survived 20,000,000 iterations: 1832MB used
Survived 21,000,000 iterations: 1924MB used
Survived 22,000,000 iterations: 2016MB used
Survived 23,000,000 iterations: 2108MB used
Survived 24,000,000 iterations: 2198MB used
Survived 25,000,000 iterations: 2290MB used
Survived 26,000,000 iterations: 2382MB used
Survived 27,000,000 iterations: 2474MB used
Survived 28,000,000 iterations: 2564MB used
Survived 29,000,000 iterations: 2656MB used
Survived 30,000,000 iterations: 2748MB used
Survived 31,000,000 iterations: 2840MB used
Survived 32,000,000 iterations: 2932MB used
Survived 33,000,000 iterations: 3022MB used
Survived 34,000,000 iterations: 3114MB used
Survived 35,000,000 iterations: 3206MB used
Survived 36,000,000 iterations: 3298MB used
Survived 37,000,000 iterations: 3388MB used
Survived 38,000,000 iterations: 3480MB used
Survived 39,000,000 iterations: 3572MB used
Survived 40,000,000 iterations: 3664MB used
Survived 41,000,000 iterations: 3756MB used
Survived 42,000,000 iterations: 3846MB used
Killed
Orvid commented 8 years ago

I don't believe 3.14 had full GC support, could you try this on 3.15?

edwinsmith commented 8 years ago

just to verify, your last try was with -vEval.EnableGC=1, correct?

RyanGordon commented 8 years ago

@edwinsmith Yes, our last try was with -vEval.EnableGC=1 @Orvid I will recompile with 3.15 and try it again and post the results here!

edwinsmith commented 8 years ago

Oh, also, the current GC scheduling heuristic is based on a fraction of the heap limit, which makes sense for production scenarios with small heap limits, but nowhere else. You have it set to 10G, and the linux kernel kills the hhvm process around 4G. Try setting the heap limit to something smaller?

RyanGordon commented 8 years ago

Should I do that on 3.15 or 3.14.5 or it doesn't matter?

edwinsmith commented 8 years ago

I'd say 3.15 or master; the heuristic hasn't changed in a couple weeks but not sure how old 3.14 is, like @Orvid said.

RyanGordon commented 8 years ago

Here is the updated results.

hhvm --version
HipHop VM 3.15.0 (rel)
Compiler: tags/HHVM-3.15.0-0-g92a682ebaa3c85b84857852d8621f528607fe27d
Repo schema: 225d4323575bbc8a498dc809a1c41354f6bca830

Updated cyclical_test.php script:

<?php

ini_set('memory_limit', '512M');

class Left {
   public $right;
}

class Right {
   public $left;
}

$iter = 0;
while (true) {
   $left = new Left();
   $right = new Right();
   $left->right = $right;
   $right->left = $left;
   $iter++;
   if ($iter % 1000000 === 0) {
      $formattedIter = number_format($iter, 0);
      $memoryUsage = memory_get_usage() / (1024 * 1024);
      echo "Survived {$formattedIter} iterations: {$memoryUsage}MB used\n";
   }
}

?>

First Test w/o GC:

qhhvm cyclical_test.php 
Survived 1,000,000 iterations: 92MB used
Survived 2,000,000 iterations: 184MB used
Survived 3,000,000 iterations: 276MB used
Survived 4,000,000 iterations: 368MB used
Survived 5,000,000 iterations: 460MB used
Survived 6,000,000 iterations: 550MB used
Fatal error: request has exceeded memory limit in /home/ryangordon/cyclical_test.php on line 11

Second Test With GC:

$ qhhvm -vEval.EnableGC=1 cyclical_test.php 
Survived 1,000,000 iterations: 92MB used
Survived 2,000,000 iterations: 184MB used
Survived 3,000,000 iterations: 276MB used
Survived 4,000,000 iterations: 290MB used
Survived 5,000,000 iterations: 290MB used
Survived 6,000,000 iterations: 290MB used
Survived 7,000,000 iterations: 300MB used
Survived 8,000,000 iterations: 300MB used
Survived 9,000,000 iterations: 300MB used
Survived 10,000,000 iterations: 302MB used
Survived 11,000,000 iterations: 302MB used
Survived 12,000,000 iterations: 302MB used
Survived 13,000,000 iterations: 304MB used
Survived 14,000,000 iterations: 304MB used
Survived 15,000,000 iterations: 304MB used
Survived 16,000,000 iterations: 304MB used
Survived 17,000,000 iterations: 306MB used
Survived 18,000,000 iterations: 306MB used
Survived 19,000,000 iterations: 306MB used
Survived 20,000,000 iterations: 308MB used
Survived 21,000,000 iterations: 308MB used
Survived 22,000,000 iterations: 308MB used
Survived 23,000,000 iterations: 310MB used
Survived 24,000,000 iterations: 310MB used
Survived 25,000,000 iterations: 310MB used
Survived 26,000,000 iterations: 310MB used
Survived 27,000,000 iterations: 312MB used
Survived 28,000,000 iterations: 312MB used
Survived 29,000,000 iterations: 312MB used
Survived 30,000,000 iterations: 314MB used
Survived 31,000,000 iterations: 314MB used
Survived 32,000,000 iterations: 314MB used
Survived 33,000,000 iterations: 314MB used
Survived 34,000,000 iterations: 316MB used
Survived 35,000,000 iterations: 316MB used
Survived 36,000,000 iterations: 316MB used
Survived 37,000,000 iterations: 318MB used
Survived 38,000,000 iterations: 318MB used
Survived 39,000,000 iterations: 318MB used
Survived 40,000,000 iterations: 318MB used
Survived 41,000,000 iterations: 320MB used
Survived 42,000,000 iterations: 320MB used
Survived 43,000,000 iterations: 320MB used
Survived 44,000,000 iterations: 322MB used
Survived 45,000,000 iterations: 322MB used
Survived 46,000,000 iterations: 322MB used
Survived 47,000,000 iterations: 322MB used
Survived 48,000,000 iterations: 324MB used
Survived 49,000,000 iterations: 324MB used
Survived 50,000,000 iterations: 324MB used
Survived 51,000,000 iterations: 326MB used
Survived 52,000,000 iterations: 326MB used
Survived 53,000,000 iterations: 326MB used
Survived 54,000,000 iterations: 326MB used
Survived 55,000,000 iterations: 328MB used
Survived 56,000,000 iterations: 328MB used
Survived 57,000,000 iterations: 328MB used
Survived 58,000,000 iterations: 330MB used
Survived 59,000,000 iterations: 330MB used
Survived 60,000,000 iterations: 330MB used
Survived 61,000,000 iterations: 330MB used
Survived 62,000,000 iterations: 332MB used
Survived 63,000,000 iterations: 332MB used
Survived 64,000,000 iterations: 332MB used
Survived 65,000,000 iterations: 332MB used
Survived 66,000,000 iterations: 334MB used
Survived 67,000,000 iterations: 334MB used
Survived 68,000,000 iterations: 334MB used
Survived 69,000,000 iterations: 336MB used
Survived 70,000,000 iterations: 336MB used
Survived 71,000,000 iterations: 336MB used
Survived 72,000,000 iterations: 336MB used
Survived 73,000,000 iterations: 338MB used
Survived 74,000,000 iterations: 338MB used
Survived 75,000,000 iterations: 338MB used
Survived 76,000,000 iterations: 338MB used
Survived 77,000,000 iterations: 340MB used
Survived 78,000,000 iterations: 340MB used
Survived 79,000,000 iterations: 340MB used
Survived 80,000,000 iterations: 342MB used
Survived 81,000,000 iterations: 342MB used
Survived 82,000,000 iterations: 342MB used
Survived 83,000,000 iterations: 342MB used
Survived 84,000,000 iterations: 344MB used
Survived 85,000,000 iterations: 344MB used
Survived 86,000,000 iterations: 344MB used
Survived 87,000,000 iterations: 344MB used
Survived 88,000,000 iterations: 346MB used
Survived 89,000,000 iterations: 346MB used
Survived 90,000,000 iterations: 346MB used
Survived 91,000,000 iterations: 348MB used
Survived 92,000,000 iterations: 348MB used
Survived 93,000,000 iterations: 348MB used
Survived 94,000,000 iterations: 348MB used
Survived 95,000,000 iterations: 350MB used
Survived 96,000,000 iterations: 350MB used
Survived 97,000,000 iterations: 350MB used
Survived 98,000,000 iterations: 350MB used
Survived 99,000,000 iterations: 352MB used
Survived 100,000,000 iterations: 352MB used
Survived 101,000,000 iterations: 352MB used
Survived 102,000,000 iterations: 352MB used
Survived 103,000,000 iterations: 354MB used
Survived 104,000,000 iterations: 354MB used
Survived 105,000,000 iterations: 354MB used
Survived 106,000,000 iterations: 354MB used
Survived 107,000,000 iterations: 356MB used
Survived 108,000,000 iterations: 356MB used
Survived 109,000,000 iterations: 356MB used
Survived 110,000,000 iterations: 356MB used
Survived 111,000,000 iterations: 358MB used
Survived 112,000,000 iterations: 358MB used
Survived 113,000,000 iterations: 358MB used
Survived 114,000,000 iterations: 358MB used
Survived 115,000,000 iterations: 360MB used
Survived 116,000,000 iterations: 360MB used
Survived 117,000,000 iterations: 360MB used
Survived 118,000,000 iterations: 360MB used
Survived 119,000,000 iterations: 362MB used
Survived 120,000,000 iterations: 362MB used
Survived 121,000,000 iterations: 362MB used
Survived 122,000,000 iterations: 364MB used
Survived 123,000,000 iterations: 364MB used
Survived 124,000,000 iterations: 364MB used
Survived 125,000,000 iterations: 364MB used
Survived 126,000,000 iterations: 366MB used
Survived 127,000,000 iterations: 366MB used
Survived 128,000,000 iterations: 366MB used
Survived 129,000,000 iterations: 366MB used
Survived 130,000,000 iterations: 368MB used
Survived 131,000,000 iterations: 368MB used
Survived 132,000,000 iterations: 368MB used
Survived 133,000,000 iterations: 368MB used
Survived 134,000,000 iterations: 370MB used
Survived 135,000,000 iterations: 370MB used
Survived 136,000,000 iterations: 370MB used
Survived 137,000,000 iterations: 370MB used
Survived 138,000,000 iterations: 370MB used
Survived 139,000,000 iterations: 372MB used
Survived 140,000,000 iterations: 372MB used
Survived 141,000,000 iterations: 372MB used
Survived 142,000,000 iterations: 372MB used
Survived 143,000,000 iterations: 374MB used
Survived 144,000,000 iterations: 374MB used
Survived 145,000,000 iterations: 374MB used
Survived 146,000,000 iterations: 374MB used
Survived 147,000,000 iterations: 376MB used
Survived 148,000,000 iterations: 376MB used
Survived 149,000,000 iterations: 376MB used
Survived 150,000,000 iterations: 376MB used
Survived 151,000,000 iterations: 378MB used
Survived 152,000,000 iterations: 378MB used
Survived 153,000,000 iterations: 378MB used
Survived 154,000,000 iterations: 378MB used
Survived 155,000,000 iterations: 380MB used
Survived 156,000,000 iterations: 380MB used
Survived 157,000,000 iterations: 380MB used
Survived 158,000,000 iterations: 380MB used
Survived 159,000,000 iterations: 382MB used
Survived 160,000,000 iterations: 382MB used
Survived 161,000,000 iterations: 382MB used
Survived 162,000,000 iterations: 382MB used
Survived 163,000,000 iterations: 384MB used
Survived 164,000,000 iterations: 384MB used
Survived 165,000,000 iterations: 384MB used
Survived 166,000,000 iterations: 384MB used
Survived 167,000,000 iterations: 386MB used
Survived 168,000,000 iterations: 386MB used
Survived 169,000,000 iterations: 386MB used
Survived 170,000,000 iterations: 386MB used
Survived 171,000,000 iterations: 386MB used
Survived 172,000,000 iterations: 388MB used
Survived 173,000,000 iterations: 388MB used
Survived 174,000,000 iterations: 388MB used
Survived 175,000,000 iterations: 388MB used
Survived 176,000,000 iterations: 390MB used
Survived 177,000,000 iterations: 390MB used
Survived 178,000,000 iterations: 390MB used
Survived 179,000,000 iterations: 390MB used
Survived 180,000,000 iterations: 392MB used
Survived 181,000,000 iterations: 392MB used
Survived 182,000,000 iterations: 392MB used
Survived 183,000,000 iterations: 392MB used
Survived 184,000,000 iterations: 394MB used
Survived 185,000,000 iterations: 394MB used
Survived 186,000,000 iterations: 394MB used
Survived 187,000,000 iterations: 394MB used
Survived 188,000,000 iterations: 394MB used
Survived 189,000,000 iterations: 396MB used
Survived 190,000,000 iterations: 396MB used
Survived 191,000,000 iterations: 396MB used
Survived 192,000,000 iterations: 396MB used
Survived 193,000,000 iterations: 398MB used
Survived 194,000,000 iterations: 398MB used
Survived 195,000,000 iterations: 398MB used
Survived 196,000,000 iterations: 398MB used
Survived 197,000,000 iterations: 400MB used
Survived 198,000,000 iterations: 400MB used
Survived 199,000,000 iterations: 400MB used
Survived 200,000,000 iterations: 400MB used
Survived 201,000,000 iterations: 400MB used
Survived 202,000,000 iterations: 402MB used
Survived 203,000,000 iterations: 402MB used
Survived 204,000,000 iterations: 402MB used
Survived 205,000,000 iterations: 402MB used
Survived 206,000,000 iterations: 404MB used
Survived 207,000,000 iterations: 404MB used
Survived 208,000,000 iterations: 404MB used
Survived 209,000,000 iterations: 404MB used
Survived 210,000,000 iterations: 406MB used
Survived 211,000,000 iterations: 406MB used
Survived 212,000,000 iterations: 406MB used
Survived 213,000,000 iterations: 406MB used
Survived 214,000,000 iterations: 406MB used
Survived 215,000,000 iterations: 408MB used
Survived 216,000,000 iterations: 408MB used
Survived 217,000,000 iterations: 408MB used
Survived 218,000,000 iterations: 408MB used
Survived 219,000,000 iterations: 410MB used
Survived 220,000,000 iterations: 410MB used
Survived 221,000,000 iterations: 410MB used
Survived 222,000,000 iterations: 410MB used
Survived 223,000,000 iterations: 410MB used
Survived 224,000,000 iterations: 412MB used
Survived 225,000,000 iterations: 412MB used
Survived 226,000,000 iterations: 412MB used
Survived 227,000,000 iterations: 412MB used
Survived 228,000,000 iterations: 414MB used
Survived 229,000,000 iterations: 414MB used
Survived 230,000,000 iterations: 414MB used
Survived 231,000,000 iterations: 414MB used
Survived 232,000,000 iterations: 414MB used
Survived 233,000,000 iterations: 416MB used
Survived 234,000,000 iterations: 416MB used
Survived 235,000,000 iterations: 416MB used
Survived 236,000,000 iterations: 416MB used
Survived 237,000,000 iterations: 418MB used
Survived 238,000,000 iterations: 418MB used
Survived 239,000,000 iterations: 418MB used
Survived 240,000,000 iterations: 418MB used
Survived 241,000,000 iterations: 418MB used
Survived 242,000,000 iterations: 420MB used
Survived 243,000,000 iterations: 420MB used
Survived 244,000,000 iterations: 420MB used
Survived 245,000,000 iterations: 420MB used
Survived 246,000,000 iterations: 420MB used
Survived 247,000,000 iterations: 422MB used
Survived 248,000,000 iterations: 422MB used
Survived 249,000,000 iterations: 422MB used
Survived 250,000,000 iterations: 422MB used
Survived 251,000,000 iterations: 424MB used
Survived 252,000,000 iterations: 424MB used
Survived 253,000,000 iterations: 424MB used
Survived 254,000,000 iterations: 424MB used
Survived 255,000,000 iterations: 424MB used
Survived 256,000,000 iterations: 426MB used
Survived 257,000,000 iterations: 426MB used
Survived 258,000,000 iterations: 426MB used
Survived 259,000,000 iterations: 426MB used
Survived 260,000,000 iterations: 428MB used
Survived 261,000,000 iterations: 428MB used
Survived 262,000,000 iterations: 428MB used
Survived 263,000,000 iterations: 428MB used
Survived 264,000,000 iterations: 428MB used
Survived 265,000,000 iterations: 430MB used
Survived 266,000,000 iterations: 430MB used
Survived 267,000,000 iterations: 430MB used
Survived 268,000,000 iterations: 430MB used
Survived 269,000,000 iterations: 430MB used
Survived 270,000,000 iterations: 432MB used
Survived 271,000,000 iterations: 432MB used
Survived 272,000,000 iterations: 432MB used
Survived 273,000,000 iterations: 432MB used
Survived 274,000,000 iterations: 432MB used
Survived 275,000,000 iterations: 434MB used
Survived 276,000,000 iterations: 434MB used
Survived 277,000,000 iterations: 434MB used
Survived 278,000,000 iterations: 434MB used
Survived 279,000,000 iterations: 436MB used
Survived 280,000,000 iterations: 436MB used
Survived 281,000,000 iterations: 436MB used
Survived 282,000,000 iterations: 436MB used
Survived 283,000,000 iterations: 436MB used
Survived 284,000,000 iterations: 438MB used
Survived 285,000,000 iterations: 438MB used
Survived 286,000,000 iterations: 438MB used
Survived 287,000,000 iterations: 438MB used
Survived 288,000,000 iterations: 438MB used
Survived 289,000,000 iterations: 440MB used
Survived 290,000,000 iterations: 440MB used
Survived 291,000,000 iterations: 440MB used
Survived 292,000,000 iterations: 440MB used
Survived 293,000,000 iterations: 440MB used
Survived 294,000,000 iterations: 442MB used
Survived 295,000,000 iterations: 442MB used
Survived 296,000,000 iterations: 442MB used
Survived 297,000,000 iterations: 442MB used
Survived 298,000,000 iterations: 444MB used
Survived 299,000,000 iterations: 444MB used
Survived 300,000,000 iterations: 444MB used
Survived 301,000,000 iterations: 444MB used
Survived 302,000,000 iterations: 444MB used
Survived 303,000,000 iterations: 446MB used
Survived 304,000,000 iterations: 446MB used
Survived 305,000,000 iterations: 446MB used
Survived 306,000,000 iterations: 446MB used
Survived 307,000,000 iterations: 446MB used
Survived 308,000,000 iterations: 448MB used
Survived 309,000,000 iterations: 448MB used
Survived 310,000,000 iterations: 448MB used
Survived 311,000,000 iterations: 448MB used
Survived 312,000,000 iterations: 448MB used
Survived 313,000,000 iterations: 450MB used
Survived 314,000,000 iterations: 450MB used
Survived 315,000,000 iterations: 450MB used
Survived 316,000,000 iterations: 450MB used
Survived 317,000,000 iterations: 450MB used
Survived 318,000,000 iterations: 452MB used
Survived 319,000,000 iterations: 452MB used
Survived 320,000,000 iterations: 452MB used
Survived 321,000,000 iterations: 452MB used
Survived 322,000,000 iterations: 452MB used
Survived 323,000,000 iterations: 454MB used
Survived 324,000,000 iterations: 454MB used
Survived 325,000,000 iterations: 454MB used
Survived 326,000,000 iterations: 454MB used
Survived 327,000,000 iterations: 454MB used
Survived 328,000,000 iterations: 456MB used
Survived 329,000,000 iterations: 456MB used
Survived 330,000,000 iterations: 456MB used
Survived 331,000,000 iterations: 456MB used
Survived 332,000,000 iterations: 456MB used
Survived 333,000,000 iterations: 458MB used
Survived 334,000,000 iterations: 458MB used
Survived 335,000,000 iterations: 458MB used
Survived 336,000,000 iterations: 458MB used
Survived 337,000,000 iterations: 458MB used
Survived 338,000,000 iterations: 460MB used
Survived 339,000,000 iterations: 460MB used
Survived 340,000,000 iterations: 460MB used
Survived 341,000,000 iterations: 460MB used
Survived 342,000,000 iterations: 460MB used
Survived 343,000,000 iterations: 462MB used
Survived 344,000,000 iterations: 462MB used
Survived 345,000,000 iterations: 462MB used
Survived 346,000,000 iterations: 462MB used
Survived 347,000,000 iterations: 462MB used
Survived 348,000,000 iterations: 464MB used
Survived 349,000,000 iterations: 464MB used
Survived 350,000,000 iterations: 464MB used
Survived 351,000,000 iterations: 464MB used
Survived 352,000,000 iterations: 464MB used
Survived 353,000,000 iterations: 466MB used
Survived 354,000,000 iterations: 466MB used
Survived 355,000,000 iterations: 466MB used
Survived 356,000,000 iterations: 466MB used
Survived 357,000,000 iterations: 466MB used
Survived 358,000,000 iterations: 468MB used
Survived 359,000,000 iterations: 468MB used
Survived 360,000,000 iterations: 468MB used
Survived 361,000,000 iterations: 468MB used
Survived 362,000,000 iterations: 468MB used
Survived 363,000,000 iterations: 470MB used
Survived 364,000,000 iterations: 470MB used
Survived 365,000,000 iterations: 470MB used
Survived 366,000,000 iterations: 470MB used
Survived 367,000,000 iterations: 470MB used
Survived 368,000,000 iterations: 472MB used
Survived 369,000,000 iterations: 472MB used
Survived 370,000,000 iterations: 472MB used
Survived 371,000,000 iterations: 472MB used
Survived 372,000,000 iterations: 472MB used
Survived 373,000,000 iterations: 474MB used
Survived 374,000,000 iterations: 474MB used
Survived 375,000,000 iterations: 474MB used
Survived 376,000,000 iterations: 474MB used
Survived 377,000,000 iterations: 474MB used
Survived 378,000,000 iterations: 474MB used
Survived 379,000,000 iterations: 476MB used
Survived 380,000,000 iterations: 476MB used
Survived 381,000,000 iterations: 476MB used
Survived 382,000,000 iterations: 476MB used
Survived 383,000,000 iterations: 476MB used
Survived 384,000,000 iterations: 478MB used
Survived 385,000,000 iterations: 478MB used
Survived 386,000,000 iterations: 478MB used
Survived 387,000,000 iterations: 478MB used
Survived 388,000,000 iterations: 478MB used
Survived 389,000,000 iterations: 480MB used
Survived 390,000,000 iterations: 480MB used
Survived 391,000,000 iterations: 480MB used
Survived 392,000,000 iterations: 480MB used
Survived 393,000,000 iterations: 480MB used
Survived 394,000,000 iterations: 482MB used
Survived 395,000,000 iterations: 482MB used
Survived 396,000,000 iterations: 482MB used
Survived 397,000,000 iterations: 482MB used
Survived 398,000,000 iterations: 482MB used
Survived 399,000,000 iterations: 482MB used
Survived 400,000,000 iterations: 484MB used
Survived 401,000,000 iterations: 484MB used
Survived 402,000,000 iterations: 484MB used
Survived 403,000,000 iterations: 484MB used
Survived 404,000,000 iterations: 484MB used
Survived 405,000,000 iterations: 486MB used
Survived 406,000,000 iterations: 486MB used
Survived 407,000,000 iterations: 486MB used
Survived 408,000,000 iterations: 486MB used
Survived 409,000,000 iterations: 486MB used
Survived 410,000,000 iterations: 488MB used
Survived 411,000,000 iterations: 488MB used
Survived 412,000,000 iterations: 488MB used
Survived 413,000,000 iterations: 488MB used
Survived 414,000,000 iterations: 488MB used
Survived 415,000,000 iterations: 490MB used
Survived 416,000,000 iterations: 490MB used
Survived 417,000,000 iterations: 490MB used
Survived 418,000,000 iterations: 490MB used
Survived 419,000,000 iterations: 490MB used
Survived 420,000,000 iterations: 490MB used
Survived 421,000,000 iterations: 492MB used
Survived 422,000,000 iterations: 492MB used
Survived 423,000,000 iterations: 492MB used
Survived 424,000,000 iterations: 492MB used
Survived 425,000,000 iterations: 492MB used
Survived 426,000,000 iterations: 494MB used
Survived 427,000,000 iterations: 494MB used
Survived 428,000,000 iterations: 494MB used
Survived 429,000,000 iterations: 494MB used
Survived 430,000,000 iterations: 494MB used
Survived 431,000,000 iterations: 494MB used
Survived 432,000,000 iterations: 496MB used
Survived 433,000,000 iterations: 496MB used
Survived 434,000,000 iterations: 496MB used
Survived 435,000,000 iterations: 496MB used
Survived 436,000,000 iterations: 496MB used
Survived 437,000,000 iterations: 498MB used
Survived 438,000,000 iterations: 498MB used
Survived 439,000,000 iterations: 498MB used
Survived 440,000,000 iterations: 498MB used
Survived 441,000,000 iterations: 498MB used
Survived 442,000,000 iterations: 500MB used
Survived 443,000,000 iterations: 500MB used
Survived 444,000,000 iterations: 500MB used
Survived 445,000,000 iterations: 500MB used
Survived 446,000,000 iterations: 500MB used
Survived 447,000,000 iterations: 500MB used
Survived 448,000,000 iterations: 502MB used
Survived 449,000,000 iterations: 502MB used
Survived 450,000,000 iterations: 502MB used
Survived 451,000,000 iterations: 502MB used
Survived 452,000,000 iterations: 502MB used
Survived 453,000,000 iterations: 504MB used
Survived 454,000,000 iterations: 504MB used
Survived 455,000,000 iterations: 504MB used
Survived 456,000,000 iterations: 504MB used
Survived 457,000,000 iterations: 504MB used
Survived 458,000,000 iterations: 504MB used
Survived 459,000,000 iterations: 506MB used
Survived 460,000,000 iterations: 506MB used
Survived 461,000,000 iterations: 506MB used
Survived 462,000,000 iterations: 506MB used
Survived 463,000,000 iterations: 506MB used
Survived 464,000,000 iterations: 508MB used
Survived 465,000,000 iterations: 508MB used
Survived 466,000,000 iterations: 508MB used
Survived 467,000,000 iterations: 508MB used
Survived 468,000,000 iterations: 508MB used
Survived 469,000,000 iterations: 508MB used
Survived 470,000,000 iterations: 510MB used
Survived 471,000,000 iterations: 510MB used
Survived 472,000,000 iterations: 510MB used
Survived 473,000,000 iterations: 510MB used
Survived 474,000,000 iterations: 510MB used
Survived 475,000,000 iterations: 512MB used
Survived 476,000,000 iterations: 512MB used
Survived 477,000,000 iterations: 512MB used
Survived 478,000,000 iterations: 512MB used
Survived 479,000,000 iterations: 512MB used
Survived 480,000,000 iterations: 512MB used
Survived 481,000,000 iterations: 514MB used
Survived 482,000,000 iterations: 514MB used
Survived 483,000,000 iterations: 514MB used
Survived 484,000,000 iterations: 514MB used
Survived 485,000,000 iterations: 514MB used
Survived 486,000,000 iterations: 514MB used
Survived 487,000,000 iterations: 516MB used
Survived 488,000,000 iterations: 516MB used
Survived 489,000,000 iterations: 516MB used
Survived 490,000,000 iterations: 516MB used
Survived 491,000,000 iterations: 516MB used
Survived 492,000,000 iterations: 518MB used
Survived 493,000,000 iterations: 518MB used
Survived 494,000,000 iterations: 518MB used
Survived 495,000,000 iterations: 518MB used
Survived 496,000,000 iterations: 518MB used
Survived 497,000,000 iterations: 518MB used
Survived 498,000,000 iterations: 520MB used
Survived 499,000,000 iterations: 520MB used
Survived 500,000,000 iterations: 520MB used
Survived 501,000,000 iterations: 520MB used
Survived 502,000,000 iterations: 520MB used
Survived 503,000,000 iterations: 520MB used
Survived 504,000,000 iterations: 522MB used
Survived 505,000,000 iterations: 522MB used
Survived 506,000,000 iterations: 522MB used
Survived 507,000,000 iterations: 522MB used
Survived 508,000,000 iterations: 522MB used
Survived 509,000,000 iterations: 524MB used
Survived 510,000,000 iterations: 524MB used
Survived 511,000,000 iterations: 524MB used
Survived 512,000,000 iterations: 524MB used
Survived 513,000,000 iterations: 524MB used
Survived 514,000,000 iterations: 524MB used
Survived 515,000,000 iterations: 526MB used
Survived 516,000,000 iterations: 526MB used
Survived 517,000,000 iterations: 526MB used
Survived 518,000,000 iterations: 526MB used
Survived 519,000,000 iterations: 526MB used
Survived 520,000,000 iterations: 526MB used
Survived 521,000,000 iterations: 528MB used
Survived 522,000,000 iterations: 528MB used
Survived 523,000,000 iterations: 528MB used
Survived 524,000,000 iterations: 528MB used
Survived 525,000,000 iterations: 528MB used
Survived 526,000,000 iterations: 528MB used
Survived 527,000,000 iterations: 530MB used
Survived 528,000,000 iterations: 530MB used
Survived 529,000,000 iterations: 530MB used
Survived 530,000,000 iterations: 530MB used
Survived 531,000,000 iterations: 530MB used
Survived 532,000,000 iterations: 532MB used
Survived 533,000,000 iterations: 532MB used
Survived 534,000,000 iterations: 532MB used
Survived 535,000,000 iterations: 532MB used
Survived 536,000,000 iterations: 532MB used
Survived 537,000,000 iterations: 532MB used
Survived 538,000,000 iterations: 534MB used
Survived 539,000,000 iterations: 534MB used
Survived 540,000,000 iterations: 534MB used
Survived 541,000,000 iterations: 534MB used
Survived 542,000,000 iterations: 534MB used
Survived 543,000,000 iterations: 534MB used
Survived 544,000,000 iterations: 536MB used
Survived 545,000,000 iterations: 536MB used
Survived 546,000,000 iterations: 536MB used
Survived 547,000,000 iterations: 536MB used
Survived 548,000,000 iterations: 536MB used
Survived 549,000,000 iterations: 536MB used
Survived 550,000,000 iterations: 538MB used
Survived 551,000,000 iterations: 538MB used
Survived 552,000,000 iterations: 538MB used
Survived 553,000,000 iterations: 538MB used
Survived 554,000,000 iterations: 538MB used
Survived 555,000,000 iterations: 538MB used
Survived 556,000,000 iterations: 540MB used
Survived 557,000,000 iterations: 540MB used
Survived 558,000,000 iterations: 540MB used
Survived 559,000,000 iterations: 540MB used
Survived 560,000,000 iterations: 540MB used
Survived 561,000,000 iterations: 540MB used
Survived 562,000,000 iterations: 542MB used
Survived 563,000,000 iterations: 542MB used
Survived 564,000,000 iterations: 542MB used
Survived 565,000,000 iterations: 542MB used
Survived 566,000,000 iterations: 542MB used
Survived 567,000,000 iterations: 542MB used
Survived 568,000,000 iterations: 544MB used
Survived 569,000,000 iterations: 544MB used
Survived 570,000,000 iterations: 544MB used
Survived 571,000,000 iterations: 544MB used
Survived 572,000,000 iterations: 544MB used
Survived 573,000,000 iterations: 546MB used
Survived 574,000,000 iterations: 546MB used
Survived 575,000,000 iterations: 546MB used
Survived 576,000,000 iterations: 546MB used
Survived 577,000,000 iterations: 546MB used
Survived 578,000,000 iterations: 546MB used
Survived 579,000,000 iterations: 548MB used
Survived 580,000,000 iterations: 548MB used
Survived 581,000,000 iterations: 548MB used
Survived 582,000,000 iterations: 548MB used
Survived 583,000,000 iterations: 548MB used
Survived 584,000,000 iterations: 548MB used
Survived 585,000,000 iterations: 550MB used
Survived 586,000,000 iterations: 550MB used
Survived 587,000,000 iterations: 550MB used
Survived 588,000,000 iterations: 550MB used
Survived 589,000,000 iterations: 550MB used
Survived 590,000,000 iterations: 550MB used
Survived 591,000,000 iterations: 552MB used
Survived 592,000,000 iterations: 552MB used
Survived 593,000,000 iterations: 552MB used
Survived 594,000,000 iterations: 552MB used
Survived 595,000,000 iterations: 552MB used
Survived 596,000,000 iterations: 552MB used
Survived 597,000,000 iterations: 554MB used
Survived 598,000,000 iterations: 554MB used
Survived 599,000,000 iterations: 554MB used
Survived 600,000,000 iterations: 554MB used
Survived 601,000,000 iterations: 554MB used
Survived 602,000,000 iterations: 554MB used
Survived 603,000,000 iterations: 556MB used
Survived 604,000,000 iterations: 556MB used
Survived 605,000,000 iterations: 556MB used
Survived 606,000,000 iterations: 556MB used
Survived 607,000,000 iterations: 556MB used
Survived 608,000,000 iterations: 556MB used
Survived 609,000,000 iterations: 556MB used
Survived 610,000,000 iterations: 558MB used
Survived 611,000,000 iterations: 558MB used
Survived 612,000,000 iterations: 558MB used
Survived 613,000,000 iterations: 558MB used
Survived 614,000,000 iterations: 558MB used
Survived 615,000,000 iterations: 558MB used
Survived 616,000,000 iterations: 560MB used
Survived 617,000,000 iterations: 560MB used
Survived 618,000,000 iterations: 560MB used
Survived 619,000,000 iterations: 560MB used
Survived 620,000,000 iterations: 560MB used
Survived 621,000,000 iterations: 560MB used
Survived 622,000,000 iterations: 562MB used
Survived 623,000,000 iterations: 562MB used
Survived 624,000,000 iterations: 562MB used
Survived 625,000,000 iterations: 562MB used
Survived 626,000,000 iterations: 562MB used
Survived 627,000,000 iterations: 562MB used
Survived 628,000,000 iterations: 564MB used
Survived 629,000,000 iterations: 564MB used
Survived 630,000,000 iterations: 564MB used
Survived 631,000,000 iterations: 564MB used
Survived 632,000,000 iterations: 564MB used
Survived 633,000,000 iterations: 564MB used
Survived 634,000,000 iterations: 566MB used
Survived 635,000,000 iterations: 566MB used
Survived 636,000,000 iterations: 566MB used
Survived 637,000,000 iterations: 566MB used
Survived 638,000,000 iterations: 566MB used
Survived 639,000,000 iterations: 566MB used
Survived 640,000,000 iterations: 568MB used
Survived 641,000,000 iterations: 568MB used
Survived 642,000,000 iterations: 568MB used
Survived 643,000,000 iterations: 568MB used
Survived 644,000,000 iterations: 568MB used
Survived 645,000,000 iterations: 568MB used
Survived 646,000,000 iterations: 570MB used
Survived 647,000,000 iterations: 570MB used
Survived 648,000,000 iterations: 570MB used
Survived 649,000,000 iterations: 570MB used
Survived 650,000,000 iterations: 570MB used
Survived 651,000,000 iterations: 570MB used
Survived 652,000,000 iterations: 570MB used
Survived 653,000,000 iterations: 572MB used
Survived 654,000,000 iterations: 572MB used
Survived 655,000,000 iterations: 572MB used
Survived 656,000,000 iterations: 572MB used
Survived 657,000,000 iterations: 572MB used
Survived 658,000,000 iterations: 572MB used
Survived 659,000,000 iterations: 574MB used
Survived 660,000,000 iterations: 574MB used
Survived 661,000,000 iterations: 574MB used
Survived 662,000,000 iterations: 574MB used
Survived 663,000,000 iterations: 574MB used
Survived 664,000,000 iterations: 574MB used
Survived 665,000,000 iterations: 576MB used
Survived 666,000,000 iterations: 576MB used
Survived 667,000,000 iterations: 576MB used
Survived 668,000,000 iterations: 576MB used
Survived 669,000,000 iterations: 576MB used
Survived 670,000,000 iterations: 576MB used
Survived 671,000,000 iterations: 578MB used
Survived 672,000,000 iterations: 578MB used
Survived 673,000,000 iterations: 578MB used
Survived 674,000,000 iterations: 578MB used
Survived 675,000,000 iterations: 578MB used
Survived 676,000,000 iterations: 578MB used
Survived 677,000,000 iterations: 578MB used
Survived 678,000,000 iterations: 580MB used
Survived 679,000,000 iterations: 580MB used
Survived 680,000,000 iterations: 580MB used
Survived 681,000,000 iterations: 580MB used
Survived 682,000,000 iterations: 580MB used
Survived 683,000,000 iterations: 580MB used
Survived 684,000,000 iterations: 582MB used
Survived 685,000,000 iterations: 582MB used
Survived 686,000,000 iterations: 582MB used
Survived 687,000,000 iterations: 582MB used
Survived 688,000,000 iterations: 582MB used
Survived 689,000,000 iterations: 582MB used
Survived 690,000,000 iterations: 584MB used
Survived 691,000,000 iterations: 584MB used
Survived 692,000,000 iterations: 584MB used
Survived 693,000,000 iterations: 584MB used
Survived 694,000,000 iterations: 584MB used
Survived 695,000,000 iterations: 584MB used
Survived 696,000,000 iterations: 584MB used
Survived 697,000,000 iterations: 586MB used
Survived 698,000,000 iterations: 586MB used
Survived 699,000,000 iterations: 586MB used
Survived 700,000,000 iterations: 586MB used
Survived 701,000,000 iterations: 586MB used
Survived 702,000,000 iterations: 586MB used
Survived 703,000,000 iterations: 588MB used
Survived 704,000,000 iterations: 588MB used
Survived 705,000,000 iterations: 588MB used
Survived 706,000,000 iterations: 588MB used
Survived 707,000,000 iterations: 588MB used
Survived 708,000,000 iterations: 588MB used
Survived 709,000,000 iterations: 588MB used
Survived 710,000,000 iterations: 590MB used
Survived 711,000,000 iterations: 590MB used
Survived 712,000,000 iterations: 590MB used
Survived 713,000,000 iterations: 590MB used
Survived 714,000,000 iterations: 590MB used
Survived 715,000,000 iterations: 590MB used
Survived 716,000,000 iterations: 592MB used
Survived 717,000,000 iterations: 592MB used
Survived 718,000,000 iterations: 592MB used
Survived 719,000,000 iterations: 592MB used
Survived 720,000,000 iterations: 592MB used
Survived 721,000,000 iterations: 592MB used
Survived 722,000,000 iterations: 592MB used
Survived 723,000,000 iterations: 594MB used
Survived 724,000,000 iterations: 594MB used
Survived 725,000,000 iterations: 594MB used
Survived 726,000,000 iterations: 594MB used
Survived 727,000,000 iterations: 594MB used
Survived 728,000,000 iterations: 594MB used
Survived 729,000,000 iterations: 596MB used
Survived 730,000,000 iterations: 596MB used
Survived 731,000,000 iterations: 596MB used
Survived 732,000,000 iterations: 596MB used
Survived 733,000,000 iterations: 596MB used
Survived 734,000,000 iterations: 596MB used
Survived 735,000,000 iterations: 596MB used
Fatal error: request has exceeded memory limit in /home/ryangordon/cyclical_test.php on line 7

It lasts much longer but it still leaks memory even with the GC turned on and goes over the memory limit specified until it eventually errors out.

I also ran these two tests on 3.14.5 with the same results.

aorenste commented 8 years ago

I'm seeing this same behavior on master

edwinsmith commented 8 years ago

I'll take a look at this, tho I might not have much to report until next week. @aorenste if you peek in scuba you should see collection stats from your test runs.

firodj commented 8 years ago

what is qhhvm? but that was for long running script on CLI? how about the script when running on server, it is same or not?

firodj commented 8 years ago

what is qhhvm? but that was for long running script on CLI? how about the script when running on server, it is same or not?

RyanGordon commented 8 years ago

Sorry qhhvm is an alias for

# qhhvm
export LD_LIBRARY_PATH=/opt/pcrelib
exec /usr/local/bin/hhvm $@

I haven't tested this through the server, just the CLI, since it is a long running script.

lexidor commented 1 year ago

I swooped in to close this issue, as this looked like a JIT profiling data[^1] related thing, rather than a GC thing. This is ptofiling data is especially big on the first request. Since you invoked hhvm from the CLI, this was "the first request".

I have ran this repro in server mode, both repo auth and plain jit. I waited for the profiling data to be put on the treadmill and PGO to kick in. All roads lead to an OOM. I can't get past 33,000,000 iterations before hitting an OOM at 2GB. Hhvm has regressed since the 3.15.x days.

Tested on hhvm 4.168.

[^1]: hhvm collects information on branches, types and a whole lot more. This profiling can take more memory than your actual program.