我正在使用laravel 5.5.*
和guzzlehttp/guzzle ^6.3
。我在同一个项目(using laravel api.php
)中创建了API,并在同一个项目(using laravel web.php
)和throttle 120 per second
上使用了API。
一切正常但在使用guzzle解析时突然出现以下错误
{
"error": "FatalErrorException",
"reason": "Allowed memory size of 536870912 bytes exhausted (tried to allocate 266342400 bytes)",
"code": 1,
"trace": []
}
使用XAMPP server
和memory_limit=2048M
。
如果我在浏览器中访问API,则可以正常加载
Guzzle解析下面的代码
$client = new Client([
'base_uri' => env('API_URL'),
'headers' => ['Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8'],
'debug' => true,
]);
请有人帮助我如何修复它?即使我清除缓存也生成了一个新密钥
答案 0 :(得分:1)
您的脚本中存在内存泄漏问题总是来自while loop
中的重新定义,请尝试使用memory_get_usage
来调试脚本的内存使用情况。
并且不要在循环中定义一个类,在你的情况下你必须在循环之外使用一个适配器,如下所示:
$adapter = new \GuzzleHttp\Adapter\Curl\MultiAdapter(
new \GuzzleHttp\Message\MessageFactory()
);
while (true) {
$client = new GuzzleHttp\Client(['adapter' => $adapter]);
$client->get('http://example.com/guzzle-server');
echo memory_get_usage() . "\n";
usleep(20000);
}
编辑:
您可以在内存消耗器上进行更多调试:
EDIT2 :
作为新评论,请尝试通过memory_get_usage
功能查看内存使用情况。在打电话给你的api之后。