[wp-trac] [WordPress Trac] #55206: wp core api memory leaks
WordPress Trac
noreply at wordpress.org
Wed Feb 23 05:40:46 UTC 2022
#55206: wp core api memory leaks
--------------------------+------------------------------
Reporter: sllimrovert | Owner: (none)
Type: defect (bug) | Status: assigned
Priority: normal | Milestone: Awaiting Review
Component: Database | Version: trunk
Severity: normal | Resolution:
Keywords: 2nd-opinion | Focuses: performance
--------------------------+------------------------------
Comment (by sllimrovert):
Hi Sergey,
Thank you for the response.
I agree `SAVEQUERIES` is working as intended, but it's not uncommon for it
to be on by default in a development environment. It could potentially
lead to confusing time spent by inexperienced devs who've coded themselves
into a memory limit corner. For this one, I'd solve it using the constant
to initialize a `$save_queries` property of `$wpdb`, same as how
`$show_errors` is. It would make it useful for devs to be able to grab
just the queries from their set of calls.
For the cache one, two days ago I learned of a function called
`wp_suspend_cache_addition`. Thank you for that. Totally solves the
scenario. Still, it's conceivable someone doing generally best practices
using the common api could find themselves in OOM territory. For this one
I'd solve it with garbage collection. If a group in the cache exceeds
some memory threshold, it gets pruned.
I just looked at WP Background Processing, another one new to me. That's
a beautifully written piece of code by the folks at Delicious Brains, as
it usually is. And in fact, didn't they even come across memory issues as
evidenced by - https://github.com/deliciousbrains/wp-background-
processing/master/wp-background-process.php#L343.
Me, I have a code snippet that I use when I need it, which is usually when
processing thousands of unique posts.
{{{#!php
<?php
/**
* Caching is normally good. However, when running a big batch process,
it often isn't. We might be
* caching things for the whole request that we really only need for the
current record. That's a
* memory leak. Additionally, if SAVEQUERIES is defined as true, then
$wpdb saves all queries throughout
* the request. That's another memory leak. We prevent these here with
the next two lines.
*
* @return void
*/
function wp_prevent_memory_leak() {
wp_cache_flush();
global $wpdb;
$wpdb->queries = array();
}
}}}
--
Ticket URL: <https://core.trac.wordpress.org/ticket/55206#comment:2>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list