我有一个奇怪的行为,我希望有人能帮助我。我做了同样的调用一次与浏览器和一次与 curl 。
示例browser: https://www.myurl.com/index.php?foo=bar
curl: curl https://www.myurl.com/index.php?foo=bar
如果我用浏览器调用url(不管是哪种),那么一切都按预期工作,当我用curl调用url时我的内存溢出。
代码片段:
private function doSomething()
{
$this->doSomeLog('Start process');
foreach ($foo as $bar) {
$this->doLogMemory('Memory usage: ' . memory_get_usage());
$this->callMethodA();
$this->callMethodB();
// some more code
}
}
// Output browser (memory stays at the same level):
>Start process
>Memory usage: 25384948
>Memory usage: 25386731
>Memory usage: 25396326
>Memory usage: 25396326
// Output curl (memory grows steadily):
>Start process
>Memory usage: 25384948
>Memory usage: 162495865
>Memory usage: 236915437
>Memory usage: 426158496
有没有人知道为什么会这样,以及如何避免/修复它?
1条答案
按热度按时间isr3a4wc1#
对多个请求重复使用curl句柄会泄漏内存。每个请求大约会泄漏100字节。当使用同一个句柄发出大量请求时,这是一个问题。Libcurl文档指出,为了重复使用连接,应尽可能重复使用句柄。此错误发生在Windows XP/IIS和Apache/FreeBSD 6.2上