You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Multiple calls within while (true) loop to Cache::get() is causing incremental memory consumption (leak) when called from a custom artisan command ran within the terminal. See attached screenshots:
I'm using Redis as my cache driver locally here and in production. I'm using Laravel telescope locally.
Without the Cache::get block
/** * Execute the console command. */publicfunctionhandle(): int
{
$lastRestart = Cache::get('statistic_aggregates:ingest:restart');
while (true) {
dump(memory_get_usage() / (1024 * 1024));
// if ($lastRestart !== Cache::get('statistic_aggregates:ingest:restart')) {// Cache::forget('statistic_aggregates:ingest:restart');// return self::SUCCESS;// }
Sleep::for(1)->second();
}
}
With the Cache::get block
/** * Execute the console command. */publicfunctionhandle(): int
{
$lastRestart = Cache::get('statistic_aggregates:ingest:restart');
while (true) {
dump(memory_get_usage() / (1024 * 1024));
if ($lastRestart !== Cache::get('statistic_aggregates:ingest:restart')) {
Cache::forget('statistic_aggregates:ingest:restart');
returnself::SUCCESS;
}
Sleep::for(1)->second();
}
}
Steps To Reproduce
Create a simple artisan command and run it from the command line with a while loop to Redis
Additionally, I have tried adding the following block of code to my project and calling it:
/** * Schedule Telescope to store entries if enabled. */protectedfunctionensureTelescopeEntriesAreCollected(): void
{
if ($this->laravel->bound(\Laravel\Telescope\Contracts\EntriesRepository::class)) {
\Laravel\Telescope\Telescope::store($this->laravel->make(\Laravel\Telescope\Contracts\EntriesRepository::class));
}
}
Still creating a memory leak after 10 seconds.
Additional context
I've just tried some other things, replacing dump() with echo, still get the same memory leak.
Interestingly the problem doesn't happen when simply echoing other facades like: str()->random(32) or now()
The text was updated successfully, but these errors were encountered:
@cosmastech Interestingly in a fresh install of Laravel, with Telescope, the problem still occurs. Turning Telescope off in this project and the memory doesn't leak.
In a much larger project with Telescope turned off, the memory is still leaking.
I even tried calling ensureTelescopeEntriesAreCollected but no luck? Maybe there's another way to detect and collect telescope entries if telescope is on?
I would garbage collect, via gc_collect_cycles(), before calling memory_get_usage() and see if there are any changes.
I would also recommend turning off events to see if that is where the problem lies. You can do this by specifying "events" => false in the cache driver's config.
I'll give that a shot. I did try the garbage collection but it didn't return any cycles. Garbage collection was enabled when I checked the gc enabled method
Laravel Version
11.35.1
PHP Version
8.3.8
Database Driver & Version
MySql 8
Description
Multiple calls within
while (true)
loop toCache::get()
is causing incremental memory consumption (leak) when called from a custom artisan command ran within the terminal. See attached screenshots:I'm using Redis as my cache driver locally here and in production. I'm using Laravel telescope locally.
Without the
Cache::get
blockWith the
Cache::get
blockSteps To Reproduce
Additionally, I have tried adding the following block of code to my project and calling it:
Still creating a memory leak after 10 seconds.
Additional context
I've just tried some other things, replacing
dump()
withecho
, still get the same memory leak.Interestingly the problem doesn't happen when simply echoing other facades like:
str()->random(32)
ornow()
The text was updated successfully, but these errors were encountered: