这是 Guzzle 中间件中的内存泄漏吗?
Is this a memory leak in Guzzle middleware?
下面的输出是否显示内存泄漏?
我的工作服务器 运行 内存不足。虽然它是一个稳定的分配,但它在执行后没有释放内存。
这里是问题https://github.com/guzzle/oauth-subscriber/issues/47#issuecomment-148480943
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Subscriber\Oauth\Oauth1;
function stack_it()
{
$stack = HandlerStack::create();
$middleware = new Oauth1([
'consumer_key' => NULL,
'consumer_secret' => NULL,
'token' => NULL,
'token_secret' => NULL,
]);
$stack->push($middleware, 'oauth_1');
$stack->remove('oauth_1');
}
echo 'initial: '.memory_get_usage().PHP_EOL;
for ($i=0; $i < 20; $i++)
{
$this->stack_it();
gc_collect_cycles();
echo memory_get_usage().PHP_EOL;
}
die();
输出
initial: 3818976
4282040
4282040
4282040
4282040
...
4282040
4282040
4282040
4282040
您看到的是 HandlerStack
的正常内存消耗。我建议您参考 HandlerStack 的来源。内存使用量不会随着每次连续迭代而增加这一事实表明没有泄漏。
您会注意到,调用 HandlerStack::create()
时,处理程序中添加了对 cookie、HTTP 错误异常、重写和发送前准备正文的支持。
下面的输出是否显示内存泄漏?
我的工作服务器 运行 内存不足。虽然它是一个稳定的分配,但它在执行后没有释放内存。
这里是问题https://github.com/guzzle/oauth-subscriber/issues/47#issuecomment-148480943
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Subscriber\Oauth\Oauth1;
function stack_it()
{
$stack = HandlerStack::create();
$middleware = new Oauth1([
'consumer_key' => NULL,
'consumer_secret' => NULL,
'token' => NULL,
'token_secret' => NULL,
]);
$stack->push($middleware, 'oauth_1');
$stack->remove('oauth_1');
}
echo 'initial: '.memory_get_usage().PHP_EOL;
for ($i=0; $i < 20; $i++)
{
$this->stack_it();
gc_collect_cycles();
echo memory_get_usage().PHP_EOL;
}
die();
输出
initial: 3818976
4282040
4282040
4282040
4282040
...
4282040
4282040
4282040
4282040
您看到的是 HandlerStack
的正常内存消耗。我建议您参考 HandlerStack 的来源。内存使用量不会随着每次连续迭代而增加这一事实表明没有泄漏。
您会注意到,调用 HandlerStack::create()
时,处理程序中添加了对 cookie、HTTP 错误异常、重写和发送前准备正文的支持。