Edit report at http://bugs.php.net/bug.php?id=52061&edit=1
ID: 52061 Comment by: mail-phpbugs at fushigi dot de Reported by: mail-phpbugs at fushigi dot de Summary: memory_limit above 2G Status: Assigned Type: Bug Package: Scripting Engine problem Operating System: Linux/Centos-5 PHP Version: 5.2SVN-2010-06-12 (snap) Assigned To: pajoye New Comment: i have testet it on my test machines and the memory limit is working fine :) thx for the quick fix :) Previous Comments: ------------------------------------------------------------------------ [2010-06-19 22:48:39] fel...@php.net This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2010-06-19 22:47:27] fel...@php.net Automatic comment from SVN on behalf of felipe Revision: http://svn.php.net/viewvc/?view=revision&revision=300606 Log: - Fixed bug #52061 (memory_limit above 2G) # MFH: zend_atol() ------------------------------------------------------------------------ [2010-06-12 02:56:41] mail-phpbugs at fushigi dot de Description: ------------ PHP 5.2 doesn't coun't process memory_limit => 2048M in right way in 32bit mode it works up to 4G, after that it would cause a fatal error, this seems ok, because of the memory limitations of 32bit :) in 64bit its a REAL BUG, because after 2047M the memory limit DOESN'T MATCH, this means no memory limit is active ! as far as i have seen the memory limit for php51 isn't affectet this way because it walks in an error as of 2GB and it seems in php53 the problem is fixed, here i tried to set limits up to 8GB and all worked fine. The test script is from http://news.php.net/php.internals/48607 , but i think is shows the problem very well :) is it possible to fix this, so it will behave as php-5.3 ? or have the same matching as in 32bit version, so there is a limit if someone setting a too high value ? i have found this problem as i wanted to get a customer from an old php-5.2.13 32bit machine on a newer php-5.2.13 64bit machine :( 32bit 5.2: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.2 MB > 10000 - 1.294s: 166.7 / 177.5 MB > 20000 - 2.453s: 333.2 / 355.1 MB > 30000 - 3.988s: 499.7 / 532.4 MB > 40000 - 5.700s: 666.3 / 709.5 MB > 50000 - 7.614s: 832.8 / 886.9 MB > 60000 - 9.838s: 999.3 / 1'064.0 MB > 70000 - 11.592s: 1'165.9 / 1'241.3 MB > 80000 - 12.943s: 1'332.4 / 1'418.6 MB > 90000 - 19.795s: 1'498.9 / 1'595.7 MB PHP Fatal error: Allowed memory size of -2147483648 bytes exhausted (tried to allocate 40961 bytes) in /tmp/php-memtest.php on line 32 64bit 5.2: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.2 MB > 10000 - 0.110s: 167.0 / 177.8 MB > 20000 - 0.221s: 333.8 / 355.1 MB > 30000 - 0.335s: 500.5 / 532.2 MB > 40000 - 0.449s: 667.3 / 709.7 MB > 50000 - 0.560s: 834.1 / 887.1 MB > 60000 - 0.672s: 1'000.9 / 1'064.2 MB > 70000 - 0.782s: 1'167.7 / 1'241.7 MB > 80000 - 0.891s: 1'334.5 / 1'418.8 MB > 90000 - 1.000s: 1'501.3 / 1'596.0 MB > 100000 - 1.109s: 1'668.1 / 1'773.3 MB > 110000 - 1.219s: 1'834.9 / 1'950.4 MB > 120000 - 1.328s: 2'001.7 / 2'127.5 MB > 130000 - 1.436s: 2'168.5 / 2'304.9 MB > 140000 - 1.543s: 2'335.3 / 2'482.2 MB > 150000 - 1.651s: 2'502.1 / 2'659.3 MB > 160000 - 1.758s: 2'668.9 / 2'836.6 MB > 170000 - 1.864s: 2'835.7 / 3'013.7 MB > 180000 - 1.969s: 3'002.5 / 3'190.9 MB > 190000 - 2.079s: 3'169.3 / 3'368.2 MB > 200000 - 2.189s: 3'336.0 / 3'545.5 MB > 210000 - 2.300s: 3'502.8 / 3'722.6 MB > 220000 - 2.411s: 3'669.6 / 3'900.0 MB > 230000 - 2.519s: 3'836.4 / 4'077.1 MB > 240000 - 2.628s: 4'003.2 / 4'254.2 MB > 250000 - 2.737s: 4'170.0 / 4'431.5 MB > 260000 - 2.845s: 4'336.8 / 4'608.6 MB > 270000 - 2.953s: 4'503.6 / 4'786.0 MB > 280000 - 3.061s: 4'670.4 / 4'963.3 MB > 290000 - 3.169s: 4'837.2 / 5'140.4 MB > 300000 - 3.277s: 5'004.0 / 5'317.5 MB > 310000 - 3.384s: 5'170.8 / 5'494.9 MB > 320000 - 3.490s: 5'337.6 / 5'672.0 MB > 330000 - 3.596s: 5'504.4 / 5'849.3 MB > 340000 - 3.703s: 5'671.2 / 6'026.6 MB > 350000 - 3.809s: 5'838.0 / 6'203.7 MB > 360000 - 3.914s: 6'004.8 / 6'380.9 MB > 370000 - 4.019s: 6'171.6 / 6'558.2 MB > 380000 - 4.124s: 6'338.3 / 6'735.3 MB > 390000 - 4.231s: 6'505.1 / 6'912.4 MB > 400000 - 4.342s: 6'671.9 / 7'089.8 MB Cleaning up 200001 output handlers Done, total time: 4.638s, peak mem: 6'671.9 / 7'089.8 MB ########## Other Versions ###################### 32bit 5.1: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.1 MB > 10000 - 0.721s: 166.6 / 166.6 MB > 20000 - 1.646s: 333.0 / 333.0 MB > 30000 - 2.839s: 499.5 / 499.5 MB > 40000 - 4.010s: 665.9 / 665.9 MB > 50000 - 6.007s: 832.4 / 832.4 MB > 60000 - 8.427s: 998.8 / 998.8 MB > 70000 - 9.531s: 1'165.3 / 1'165.3 MB > 80000 - 12.218s: 1'331.7 / 1'331.7 MB > 90000 - 15.126s: 1'498.2 / 1'498.2 MB > 100000 - 17.942s: 1'664.7 / 1'664.7 MB Integer overflow in memory_limit check detected 64bit 5.1: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.1 MB > 10000 - 0.116s: 166.7 / 166.7 MB > 20000 - 0.235s: 333.3 / 333.3 MB > 30000 - 0.356s: 499.9 / 499.9 MB > 40000 - 0.473s: 666.5 / 666.5 MB > 50000 - 0.586s: 833.1 / 833.1 MB > 60000 - 0.698s: 999.7 / 999.7 MB > 70000 - 0.807s: 1'166.3 / 1'166.3 MB > 80000 - 0.916s: 1'332.9 / 1'332.9 MB > 90000 - 1.024s: 1'499.5 / 1'499.5 MB > 100000 - 1.133s: 1'666.1 / 1'666.1 MB Integer overflow in memory_limit check detected 32bit 5.3: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.3 / 0.4 MB > 10000 - 0.382s: 166.9 / 177.8 MB > 20000 - 1.000s: 333.4 / 354.9 MB > 30000 - 1.425s: 499.9 / 532.2 MB > 40000 - 1.754s: 666.5 / 709.3 MB > 50000 - 2.137s: 833.0 / 886.4 MB > 60000 - 2.484s: 999.6 / 1'063.8 MB > 70000 - 2.834s: 1'166.1 / 1'240.9 MB > 80000 - 3.129s: 1'332.6 / 1'418.2 MB > 90000 - 3.527s: 1'499.2 / 1'595.3 MB PHP Fatal error: Allowed memory size of -2147483648 bytes exhausted (tried to allocate 40961 bytes) in /tmp/php-memtest.php on line 32 64bit 5.3: Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.6 / 0.6 MB > 10000 - 0.112s: 167.4 / 178.2 MB > 20000 - 0.226s: 334.2 / 355.5 MB > 30000 - 0.340s: 501.0 / 532.8 MB > 40000 - 0.453s: 667.8 / 710.2 MB > 50000 - 0.568s: 834.6 / 887.5 MB > 60000 - 0.681s: 1'001.4 / 1'064.6 MB > 70000 - 0.792s: 1'168.2 / 1'242.2 MB > 80000 - 0.903s: 1'335.0 / 1'419.3 MB > 90000 - 1.014s: 1'501.8 / 1'596.4 MB PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 40961 bytes) in /tmp/php-memtest.php on line 32 Test script: --------------- <?php ini_set("memory_limit", "2G"); function mib($b) { return $b ? number_format($b/1024/1204, 1, ".", "'") : "?"; } function mgu($r, $p = false) { return mib($p ? memory_get_peak_usage($r) : memory_get_usage($r)); } function obs($i) { global $start; fprintf(STDERR, "> %6d - %6.3fs: %10s /%10s MB\n", $i, microtime(true)-$start, mgu(false), mgu(true) ); } $loop = 400000; $data = str_repeat(" ", 0x3fff); fprintf(STDERR, "Running %d times with a %d bytes long string ('%s...')\n", $loop, strlen($data), substr($data, 0, 3) ); $start = microtime(true); for ($i = 0; $i < $loop; ++$i) { ob_start(); echo $data; if (!($i % 10000)) { obs($i); } if ($i % 2) { ob_flush(); } elseif ($i) { ob_end_clean(); } } obs($i); fprintf(STDERR, "\nCleaning up %d output handlers\n", ob_get_level() ); while(ob_get_level()) ob_end_clean(); fprintf(STDERR, "Done, total time: %6.3fs, peak mem: %s / %s MB\n", microtime(true)-$start, mgu(false, true), mgu(true, true) ); ?> Expected result: ---------------- Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.2 MB > 10000 - 0.110s: 167.0 / 177.8 MB > 20000 - 0.221s: 333.8 / 355.1 MB > 30000 - 0.335s: 500.5 / 532.2 MB > 40000 - 0.449s: 667.3 / 709.7 MB > 50000 - 0.560s: 834.1 / 887.1 MB > 60000 - 0.672s: 1'000.9 / 1'064.2 MB > 70000 - 0.782s: 1'167.7 / 1'241.7 MB > 80000 - 0.891s: 1'334.5 / 1'418.8 MB > 90000 - 1.000s: 1'501.3 / 1'596.0 MB PHP Fatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 40961 bytes) in /tmp/php-memtest.php on line 32 Actual result: -------------- Running 400000 times with a 16383 bytes long string (' ...') > 0 - 0.000s: 0.1 / 0.2 MB > 10000 - 0.110s: 167.0 / 177.8 MB > 20000 - 0.221s: 333.8 / 355.1 MB > 30000 - 0.335s: 500.5 / 532.2 MB > 40000 - 0.449s: 667.3 / 709.7 MB > 50000 - 0.560s: 834.1 / 887.1 MB > 60000 - 0.672s: 1'000.9 / 1'064.2 MB > 70000 - 0.782s: 1'167.7 / 1'241.7 MB > 80000 - 0.891s: 1'334.5 / 1'418.8 MB > 90000 - 1.000s: 1'501.3 / 1'596.0 MB > 100000 - 1.109s: 1'668.1 / 1'773.3 MB > 110000 - 1.219s: 1'834.9 / 1'950.4 MB > 120000 - 1.328s: 2'001.7 / 2'127.5 MB > 130000 - 1.436s: 2'168.5 / 2'304.9 MB > 140000 - 1.543s: 2'335.3 / 2'482.2 MB > 150000 - 1.651s: 2'502.1 / 2'659.3 MB > 160000 - 1.758s: 2'668.9 / 2'836.6 MB > 170000 - 1.864s: 2'835.7 / 3'013.7 MB > 180000 - 1.969s: 3'002.5 / 3'190.9 MB > 190000 - 2.079s: 3'169.3 / 3'368.2 MB > 200000 - 2.189s: 3'336.0 / 3'545.5 MB > 210000 - 2.300s: 3'502.8 / 3'722.6 MB > 220000 - 2.411s: 3'669.6 / 3'900.0 MB > 230000 - 2.519s: 3'836.4 / 4'077.1 MB > 240000 - 2.628s: 4'003.2 / 4'254.2 MB > 250000 - 2.737s: 4'170.0 / 4'431.5 MB > 260000 - 2.845s: 4'336.8 / 4'608.6 MB > 270000 - 2.953s: 4'503.6 / 4'786.0 MB > 280000 - 3.061s: 4'670.4 / 4'963.3 MB > 290000 - 3.169s: 4'837.2 / 5'140.4 MB > 300000 - 3.277s: 5'004.0 / 5'317.5 MB > 310000 - 3.384s: 5'170.8 / 5'494.9 MB > 320000 - 3.490s: 5'337.6 / 5'672.0 MB > 330000 - 3.596s: 5'504.4 / 5'849.3 MB > 340000 - 3.703s: 5'671.2 / 6'026.6 MB > 350000 - 3.809s: 5'838.0 / 6'203.7 MB > 360000 - 3.914s: 6'004.8 / 6'380.9 MB > 370000 - 4.019s: 6'171.6 / 6'558.2 MB > 380000 - 4.124s: 6'338.3 / 6'735.3 MB > 390000 - 4.231s: 6'505.1 / 6'912.4 MB > 400000 - 4.342s: 6'671.9 / 7'089.8 MB Cleaning up 200001 output handlers Done, total time: 4.638s, peak mem: 6'671.9 / 7'089.8 MB ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52061&edit=1