From:             
Operating system: Linux/Centos-5
PHP version:      5.2SVN-2010-06-12 (snap)
Package:          Scripting Engine problem
Bug Type:         Bug
Bug description:memory_limit above 2G

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 bug report at http://bugs.php.net/bug.php?id=52061&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52061&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52061&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52061&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52061&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52061&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52061&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52061&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52061&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52061&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52061&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52061&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52061&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52061&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52061&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52061&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52061&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52061&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52061&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52061&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52061&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52061&r=mysqlcfg

Reply via email to