我注意到update_post_meta 导致我的内存使用量略有增加。
通常情况下,增长幅度小到无关紧要。但我正在编写一个CSV导入函数,调用它10000多次,最终导致内存不足错误。
下面是一个简单的代码示例:
function update_business($myData)
{
error_log("Used memory 1: " . memory_get_usage(false));
error_log("Allocated memory 1: " . memory_get_usage(true));
update_post_meta(\'13663\', \'business_id\', $myData);
error_log("Used memory 2: " . memory_get_usage(false));
error_log("Allocated memory 2: " . memory_get_usage(true));
}
这将导致:
...
Used memory 1: 17995848
Used memory 2: 17996992
Used memory 1: 17996992
Used memory 2: 18027720
Used memory 1: 18027720
Used memory 2: 18058448
Used memory 1: 18058448
Used memory 2: 18089176
Used memory 1: 18089176
Used memory 2: 18119904
...
没有
update_post_meta
语句,则整个循环中的内存使用量保持不变(如预期的那样)。
但在update_post_meta
语句中,内存使用量越来越大,永远不会释放。
我尝试了一系列不同的清除内存的技术,包括:
wpdb::flush
取消设置gc\\u collect\\u cycles
wp\\u cache\\u flushwp\\u suspend\\u cache\\u addition(true)
但似乎什么都不起作用。我查看了大量的搜索结果,虽然有不少人遇到过这个问题,但除了“提高你的记忆限制”或“以不同的方式进行”之外,没有多少答案,这两种方法似乎都不是最好的解决方案。
肯定有办法释放记忆?我假设WordPress、PHP、MySQL或其他东西正在缓存我不想缓存的东西,或者某个地方出现了内存泄漏,但我无法找到答案。
最合适的回答,由SO网友:Pikamander2 整理而成
原来这是由于Query Monitor,一个记录每个查询信息的插件。每次运行update\\u post\\u meta时,查询监视器都会存储一些有关查询的数据,这些数据加起来最终超出了服务器的处理能力。
在没有启用其他插件的情况下,在诸如二十一这样的默认主题上运行我的示例代码会导致预期的行为:
...
Used memory 1: 5480528
Used memory 2: 5480528
Used memory 1: 5480528
Used memory 2: 5480528
...
因此,如果您遇到类似的问题,请尝试禁用所有插件并切换到默认主题,以帮助缩小问题范围。
update_post_meta
这似乎不是问题,至少本身不是。