ID:               40222
 Comment by:       haroldp at sierraweb dot com
 Reported By:      tdondich at groundworkopensource dot com
 Status:           Open
 Bug Type:         Apache2 related
 Operating System: Ubuntu Edgy
 PHP Version:      5.2.0
 New Comment:

I added some extra debug info to the script:

<?php
        session_start();
        $myarray = array();
        $numOfIterations = 1000000;  // Set to 10000 to see the script
succeed
        for($counter = 0; $counter < $numOfIterations; $counter++) {
                $myarray[$counter] =
                        
'jkdfjklsdfjklfsdhjklsdfhildfnifsdnsdfnlfsdnklfsdnkglgfnkl;nmklsdf';
                if ( ($counter % 100000) == 0) {
                        echo("Iterations: $counter, Memory: " . 
memory_get_usage() .
"<br>\n");
                }
        }
        // copy the array, just for kicks
        $_SESSION['test'] = $myarray;
        echo("USAGE: " . memory_get_usage() . "<br>\n");
        echo("Writing Session Data.");
        session_write_close();
        echo("Completed.");
?>

And the output is:

Iterations: 0, Memory: 42336
Iterations: 100000, Memory: 20291200
Iterations: 200000, Memory: 40539976
Iterations: 300000, Memory: 61837196
Iterations: 400000, Memory: 81037264
Iterations: 500000, Memory: 100237332
Iterations: 600000, Memory: 123631704
Iterations: 700000, Memory: 142831772
Iterations: 800000, Memory: 162031840
Iterations: 900000, Memory: 181231908
USAGE: 200431716
Writing Session Data.
Fatal error: Out of memory (allocated 532152320) (tried to allocate
1834294 bytes) in /usr/local/www/apache22/data/foo.php on line 16
Completed.

My environment is FreeBSD 6.2R, Apache 2.2.3, PHP 5.2.0, and 
memory_limit = 512M.


Previous Comments:
------------------------------------------------------------------------

[2007-01-24 21:40:05] tdondich at groundworkopensource dot com

If it was performing malloc/memcpy/free, in that order, then it would
be freeing the memory back via the free() system call.  Even if it's a
bogus test, it's a test to fit your requirements.  Can you please
clarify how the session saving is taking more than 3 times the memory
usage the script says it's using?

------------------------------------------------------------------------

[2007-01-24 21:32:34] [EMAIL PROTECTED]

Right, serializing is expected to consume even more memory, because it
has to run malloc/memcpy/free a lot.
Storing 256Mb in session is noway a real task and quite a bad test,
because it's not really clear what you're testing and what result you
want to get.

------------------------------------------------------------------------

[2007-01-24 21:29:35] tdondich at groundworkopensource dot com

UPDATE:

Modified the script:
<?php

session_start();
$myarray = array();

$numOfIterations = 1000000;
for($counter = 0; $counter < $numOfIterations; $counter++) {
  $myarray[$counter] =
'jkdfjklsdfjklfsdhjklsdfhildfnifsdnsdfnlfsdnklfsdnkglgfnkl;nmklsdf';
}

$_SESSION['test'] = $myarray;

print("SLEEPING<br />");
print("USAGE: " . memory_get_usage());
sleep(5);
?>

I receive this output:
SLEEPING
USAGE: 160289476
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to
allocate 18874411 bytes) in Unknown on line 0

------------------------------------------------------------------------

[2007-01-24 21:26:56] tdondich at groundworkopensource dot com

I get this output with fatal error:
Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to
allocate 18874411 bytes) in Unknown on line 0

With this script:
<?php

session_start();
$myarray = array();

$numOfIterations = 1000000;
for($counter = 0; $counter < $numOfIterations; $counter++) {
  $myarray[$counter] =
'jkdfjklsdfjklfsdhjklsdfhildfnifsdnsdfnlfsdnklfsdnkglgfnkl;nmklsdf';
}

$_SESSION['test'] = $myarray;

print("SLEEPING<br />");
sleep(5);
?>


Because you get the SLEEPING output, it appears the high memory
consumption is occurring when the script has finished, possibly when
the session is trying to be serialized.

I'm running with PHP Version 5.2.1RC4-dev

------------------------------------------------------------------------

[2007-01-24 21:18:27] [EMAIL PROTECTED]

Cannot reproduce.

100000 - 25.6Mb
1000000 - 256Mb

Use memory_get_usage() to get the memory usage.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/40222

-- 
Edit this bug report at http://bugs.php.net/?id=40222&edit=1

Reply via email to