#48046 [Com]: memory does not free with unset?
| From: | boettcher at freshframes dot com | Date: | Wed, 22 Apr 2009 14:41:54 +0000 |
| Subject: | #48046 [Com]: memory does not free with unset? | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-136135@lists.php.net to get a copy of this message | ||
ID: 48046
Comment by: boettcher at freshframes dot com
Reported By: nikitin at freshframes dot com
Status: Feedback
Bug Type: Performance problem
Operating System: linux suse 10.3
PHP Version: 5.2.9
New Comment:
You need 250MB memory_limit to execute.
-----
This script uses ~200MB at the end of script and got a peak of ~200MB.
If you uncomment the unsets you'll have less memory (current) usage and
a slight less memory peak
-----
<?php
ini_set( 'memory_limit', '1000M' );
$data = $array_1 = $array_2 = $array_3 = array();
for( $i = 0; $i < 10000; $i++ ) $array_1[] = rand( 3456, 987641234 ) .
str_repeat( implode( '', range( 'a', 'z' ) ), rand( 70, 200 ));
$data = array_merge( $data, $array_1 );
#unset( $array_1 );
for( $i = 0; $i < 20000; $i++ ) $array_2[] = rand( 1232, 987641234 ) .
str_repeat( implode( '', range( 'a', 'z' ) ), rand( 160, 250 ));
$data = array_merge( $data, $array_2 );
#unset( $array_2 );
for( $i = 0; $i < 30000; $i++ ) $array_3[] = rand( 1239, 987641234 ) .
str_repeat( implode( '', range( 'a', 'z' ) ), rand( 40, 100 ));
$data = array_merge( $data, $array_3 );
#unset( $array_3 );
#unset( $data );
$memory_peak = round( memory_get_peak_usage( true ) / pow(1024, 2), 2
);
$memory = round( memory_get_usage( true ) / pow(1024, 2), 2 );
echo "\nW/O Unset\nCurrent REAL Usage: " . $memory . 'MB -- Peak: ' .
$memory_peak . "MB\n\n";
?>
---
statistics of my server (debian 4.0) [4 tests]
--
W/O Unset
Current REAL Usage: 207.75MB -- Peak: 212.75MB
-
W/O Unset
Current REAL Usage: 208.25MB -- Peak: 213MB
-
W/O Unset
Current REAL Usage: 208MB -- Peak: 212.75MB
-
W/O Unset
Current REAL Usage: 208MB -- Peak: 212.75MB
--
and now with unset uncommented [4 tests]
--
With Unset
Current REAL Usage: 40.25MB -- Peak: 209.75MB
-
With Unset
Current REAL Usage: 40MB -- Peak: 209.75MB
-
With Unset
Current REAL Usage: 38.75MB -- Peak: 209.75MB
-
With Unset
Current REAL Usage: 37.75MB -- Peak: 209.75MB
Previous Comments:
------------------------------------------------------------------------
[2009-04-22 13:54:28] scottmac@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
Memory is never freed back to the system until the request ends, PHP
will however re-use the memory assuming that a block the right size can
be found.
------------------------------------------------------------------------
[2009-04-22 13:51:07] crrodriguez at opensuse dot org
unset has never freed memory, memory is freed at script shutdown.
------------------------------------------------------------------------
[2009-04-22 13:11:25] nikitin at freshframes dot com
Description:
------------
I have a script running on two servers working on exactly the same
data.
First server is a debian system with php 5.2.8, where no problems with
memory occur.
Second server is a suse 10.3 with php 5.2.9, where i get:
PHP Fatal error: Allowed memory size of 2097152000 bytes exhausted
(tried to allocate 82 bytes) in ...
Reproduce code:
---------------
The output of the memory usage compared for each server:
Here the 5.2.8 debian:
19 - simple (5) : AR1312-16 (16.23/16.49) <br />
20 - configurable (5) : AR1312 <br />
20 - simple (0) : AR1331-04 (16.33/16.58) <br />
21 - simple (0) : AR1331-07 (16.36/16.62) <br />
22 - simple (0) : AR1331-09 (16.40/16.65) <br />
Here the 5.2.9 suse server:
20 - configurable (5) : AR1312 <br />
20 - simple (0) : AR1331-04 (91.98/92.06) <br />
21 - simple (0) : AR1331-07 (94.03/94.32) <br />
22 - simple (0) : AR1331-09 (96.08/96.37) <br />
23 - configurable (0) : AR1331 <br />
23 - simple (7) : AR1338-16 (99.20/99.28) <br />
-> memory in brackets (actual/peak)
-> seems that php 5.2.9 has bad memory management?
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=48046&edit=1