Re: trigger GC before memory limit is exhausted
| From: | Dan Ackroyd | Date: | Sat, 16 May 2015 00:42:18 +0000 |
| Subject: | Re: trigger GC before memory limit is exhausted | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-86240@lists.php.net to get a copy of this message | ||
Hi Christopher,
On 15 May 2015 at 23:14, Christoph Becker <cmbecker69@gmx.de> wrote:
> Hello internals,
>
> today I have been pointed to bug #60982[1], which appears to be an
> unpleasant limitation.
>
It sure is!
> I wonder why the GC is not triggered when the memory limit is exhausted,
To hopefully point you in the right direction, I believe the problem I
ran into, and the issue that stops it being a trivial thing to fix is
this; it can be necessary for memory allocations to take place inside
gc_collect_cycles.
For example when an object has a userland __destruct method, and it is
destroyed when the GC runs, then calling that method should require
allocations.....but we've already run out of memory, so that can't
happen.
As Rasmus suggested[1], in an issue linked through #60982, a simple
way to solve this would be to have both a soft and hard limit for
memory, and to allow the soft-limit to be a user callback, which could
call gc_collect_cycles, or not as the user desired.
However, it might be time to give the garbage collector a bit of love
and care, as it's not necessarily the case that the GC requirements
for PHP running as CGI process are the same as it running as a
long-running CLI process.
If nothing else, it would be nice to get the GC_BENCH benchmark stuff
working for the CLI again; it currently only works in certain
circumstances[2].
cheers
Dan
[1] <https://bugs.php.net/bug.php?id=41245>
[2] <https://bugs.php.net/bug.php?id=68343>