#41713 [Opn-Fbk]: Persistent memory consumption since 5.2

2007-06-27 Thread sniper
 ID:   41713
 Updated by:   [EMAIL PROTECTED]
 Reported By:  mplomer at gmx dot de
-Status:   Open
+Status:   Feedback
 Bug Type: Performance problem
-Operating System: Windows
+Operating System: win32 only
 PHP Version:  5.2.4-dev 2007-06-26 00:09
 New Comment:

Thank you, at least we know it only happens with Windows.
Have you tried running PHP as FastCGI under windows?
That might cure this too..



Previous Comments:


[2007-06-27 20:56:14] mplomer at gmx dot de

OK, no problem. ... Today I tested this with apache worker, but I still
cannot reproduce it under linux.

I used a Debian 4.0 system and I compiled Apache 2.2.4 with:
./configure --prefix=/usr/local/apache2 --with-included-apr
--with-mpm=worker --enable-so

... and PHP 5.2.3 with:
./configure --prefix=/usr/local/php
--with-apxs2=/usr/local/apache2/bin/apxs --enable-memory-limit

So phpinfo() said, Thread Safety is enabled. And I played around with
the elementCount ... but under linux the memory is always completely
freed.

If you have some tips to track this down inside PHP, please let me
know. I now have a working PHP build-environment under windows.



[2007-06-27 11:54:27] [EMAIL PROTECTED]

It's most likely a ZTS issue, so testing on *nix with e.g. apache
worker and apache2handler SAPI might be a good idea too..



[2007-06-27 11:42:32] [EMAIL PROTECTED]

Too bad we don't have any developers maintaining Windows port on a
daily basis.
So you're encouraged to help us and investigate the issue.
Any additional information you can find would be appreciated.



[2007-06-26 11:37:27] mplomer at gmx dot de

It seems so. I could reproduce it only under windows yet. (See my
comment from [17 Jun 9:04am UTC]).



[2007-06-26 11:10:41] [EMAIL PROTECTED]

Is this windows only issue?



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/41713

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


#41713 [Opn-Fbk]: Persistent memory consumption since 5.2

2007-06-26 Thread tony2001
 ID:   41713
 Updated by:   [EMAIL PROTECTED]
 Reported By:  mplomer at gmx dot de
-Status:   Open
+Status:   Feedback
 Bug Type: Unknown/Other Function
 Operating System: Windows
 PHP Version:  5.2.4-dev 2007-06-26 00:09
 New Comment:

Is this windows only issue?


Previous Comments:


[2007-06-26 06:52:27] mplomer at gmx dot de

I can still reproduce this. I tested this with the actual 5.2.4-dev
2007-06-26 00:09 snapshot without php.ini.
Today with 20 array elements I needed 6 or 7 script executions,
with 40 elements I need 2-3 script executions,
and with 80 I could not reproduce the problem.

Could you reproduce the problem? Or do you need some additional infos
to reproduce it?

PS: Now httpd.exe crashes on every shutdown, but this possibly another
bug ;-)



[2007-06-25 18:08:09] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.2-win32-installer-latest.msi





[2007-06-19 06:25:38] mplomer at gmx dot de

By the way ... I disabled all PHP extensions, and used the standard
php.ini settings.



[2007-06-17 09:04:01] mplomer at gmx dot de

I tested this under Linux today, and I could not reproduce it here.
Apache's memory consumption is ~10MB after each request, regardless of
the elementCount of the test-array. It seems to be a Windows specific
problem.

I compiled PHP under Linux without and with Thread-Safety
(--enable-maintainer-zts) enabled (because under Windows this is
activated), but it seems this has no influence.



[2007-06-16 16:48:04] mplomer at gmx dot de

Description:

When using php arrays with a lot of entries (about 20), I figured
out the following problem: PHP sometimes doesn't free all used memory
after completing the request. Apache uses under some circumstances 20-30
MB more RAM after the request. The problem is that this happens per
child. If an Apache runs with 64 threads, it is possible, that httpd.exe
consumes persistently 300-600 MB of RAM, even without any active
request.


Reproduce environment:
- I tested it under an Apache (1.3 and 2.2) environment unter Windows
(XP) (I didn't test it under Linux yet)
- Used PHP-Version: 5.2.3 - the problem was introduced with PHP 5.2.
With PHP 5.1.6 the problem does not appear (but I noticed, that PHP
5.1.6's memory management is much slower than the new one :-)
- Set ThreadsPerChild to 1 in httpd.conf to make sure, you hit always
the same PHP instance and avoid any constraints

Reproduce procedure:
- Freshly start your 1-thread-Apache [It will consume about 10 MB]
- Execute the following script [Memory usage will grow to ~50-60 MB,
and after execution memory usage shrinks back to ~10 MB again ... works
fine so long]
- Execute the script again 2 or more times [... and surprisingly Apache
consumes about 35MB after the request is complete!] (The number of
executions you need to reproduce the problem depends on the elementCount
of the test-array, and eventually some system dependent factors; see
reproduce code)
- If you excecute the script some more times again, someimes the memory
is freed and memory usage is about 10MB again, but after some further
requests, the memory is NOT freed again.

Because of the last point, I think, it is not a memory leak. I also
compiled PHP as debug version and there where no memory leaks reported
(with report_memleaks = On).
But I still think, the consumed memory should be completely freed after
_each_ request. If this is a feature, because something is cached, it
requires a maximum of the cache size. 20-30MB per child is definitely
too much.
If you put an echo memory_get_peak_usage(true); at the beginning of
the script, you will see, that PHP claims to use only about 200-300 KB
at every script start time. It doesn't report the 20-30MB that it
consumes since the last execution.

I tested this with an array, but the problem can, of course, be deeper
in the new memory management of PHP 5.2

Reproduce code:
---
?php

  // elementCount: Count of elements which are created in the test
array:
  // - a count of 20 demonstrates the problem at best on my
machine
  // - a count of 10 or lesser reproduces the problem too, but you
need more
  //   calls of the script (browser refreshes) until the problem
occurs
  // - with a count of 40 or more I couldn't reproduce the
problem,
  //   there it works fine
  // I couldn't figure out exactly, on which factors this count depends
on, but
  // 

#41713 [Opn-Fbk]: Persistent memory consumption since 5.2

2007-06-25 Thread tony2001
 ID:   41713
 Updated by:   [EMAIL PROTECTED]
 Reported By:  mplomer at gmx dot de
-Status:   Open
+Status:   Feedback
-Bug Type: *General Issues
+Bug Type: Unknown/Other Function
 Operating System: Windows
 PHP Version:  5.2.3
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.2-win32-installer-latest.msi




Previous Comments:


[2007-06-19 06:25:38] mplomer at gmx dot de

By the way ... I disabled all PHP extensions, and used the standard
php.ini settings.



[2007-06-17 09:04:01] mplomer at gmx dot de

I tested this under Linux today, and I could not reproduce it here.
Apache's memory consumption is ~10MB after each request, regardless of
the elementCount of the test-array. It seems to be a Windows specific
problem.

I compiled PHP under Linux without and with Thread-Safety
(--enable-maintainer-zts) enabled (because under Windows this is
activated), but it seems this has no influence.



[2007-06-16 16:48:04] mplomer at gmx dot de

Description:

When using php arrays with a lot of entries (about 20), I figured
out the following problem: PHP sometimes doesn't free all used memory
after completing the request. Apache uses under some circumstances 20-30
MB more RAM after the request. The problem is that this happens per
child. If an Apache runs with 64 threads, it is possible, that httpd.exe
consumes persistently 300-600 MB of RAM, even without any active
request.


Reproduce environment:
- I tested it under an Apache (1.3 and 2.2) environment unter Windows
(XP) (I didn't test it under Linux yet)
- Used PHP-Version: 5.2.3 - the problem was introduced with PHP 5.2.
With PHP 5.1.6 the problem does not appear (but I noticed, that PHP
5.1.6's memory management is much slower than the new one :-)
- Set ThreadsPerChild to 1 in httpd.conf to make sure, you hit always
the same PHP instance and avoid any constraints

Reproduce procedure:
- Freshly start your 1-thread-Apache [It will consume about 10 MB]
- Execute the following script [Memory usage will grow to ~50-60 MB,
and after execution memory usage shrinks back to ~10 MB again ... works
fine so long]
- Execute the script again 2 or more times [... and surprisingly Apache
consumes about 35MB after the request is complete!] (The number of
executions you need to reproduce the problem depends on the elementCount
of the test-array, and eventually some system dependent factors; see
reproduce code)
- If you excecute the script some more times again, someimes the memory
is freed and memory usage is about 10MB again, but after some further
requests, the memory is NOT freed again.

Because of the last point, I think, it is not a memory leak. I also
compiled PHP as debug version and there where no memory leaks reported
(with report_memleaks = On).
But I still think, the consumed memory should be completely freed after
_each_ request. If this is a feature, because something is cached, it
requires a maximum of the cache size. 20-30MB per child is definitely
too much.
If you put an echo memory_get_peak_usage(true); at the beginning of
the script, you will see, that PHP claims to use only about 200-300 KB
at every script start time. It doesn't report the 20-30MB that it
consumes since the last execution.

I tested this with an array, but the problem can, of course, be deeper
in the new memory management of PHP 5.2

Reproduce code:
---
?php

  // elementCount: Count of elements which are created in the test
array:
  // - a count of 20 demonstrates the problem at best on my
machine
  // - a count of 10 or lesser reproduces the problem too, but you
need more
  //   calls of the script (browser refreshes) until the problem
occurs
  // - with a count of 40 or more I couldn't reproduce the
problem,
  //   there it works fine
  // I couldn't figure out exactly, on which factors this count depends
on, but
  // it _seems_ to be not machine dependent, but play around with it.
  // Note also, that the count of array elements is important, not the
  // size of their keys or values.
  $elementCount = 20;

  for ($i = 0; $i  $elementCount; $i++) {
$variables[$i] = 'x';
  }


  // Even when you unset each array-element manually, the problem
occurs ...
  //for ($i = 0; $i  $elementCount; $i++) {
  //  unset($variables[$i]);
  //}

  // ... and/or if you unset the array itself ...
  //unset($variables);

  // ... but it does not occur, when you put the unset directly in the
first
  // for-loop, that the variable will be unset immediately. Only a
small amount
  // of memory is required for the