Description:
------------
I have a long running daemon script, which could create thousands of object every 5 minutes. I tried to free them, but memory was still used by the process.
An example script: https://3v4l.org/5ap4Z
It doesn't matter if class is empty. Or one or multiple class instances are used by the test.

Patches

Pull Requests

History

Duplicate of bug #33487.
The object store will use 8 bytes * next_power_of_two(max_number_of_objects_alive_at_the_same_time). Because object store buckets are reused when objects are destroyed, you usually do not need to worry about this. It's a one-time cost of creating many objects, not a leak that will be incurred for every object.

[2018-09-16 14:16 UTC] toma dot zoltan at bitninja dot io

Thank you for your reply. Tried to find similar issues, but missed 33487 ticket.
Is there any way in cli enviroment to free all unused memory? (Beside restarting the process).
Sometimes a process, which runs one or two week in a row can consume 500+ MB of RAM.

If PHP ends up using 500 MB of memory, it is very likely not due to this issue. You'd have to create more than 60 million objects that are *simultaneously live* to reach an object store of that size.
While the problem you are seeing can be due to a leak in PHP itself, the most common cause of "leaks" in long-running PHP processes are libraries that were not designed with this use-case in mind and "leak" memory in the form of caches that are never released -- say a static class property with an array which is filled, but never emptied. I'm not sure if there is an easy way to track down the cause. Maybe a memory profiler like https://github.com/arnaud-lb/php-memory-profiler could be of use.