Laravel Guzzle返回错误

时间:2018-06-17 09:34:04

标签: php laravel laravel-5.5 guzzle guzzle6

我正在使用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 servermemory_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,
]);

请有人帮助我如何修复它?即使我清除缓存也生成了一个新密钥

1 个答案:

答案 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);
}

编辑
您可以在内存消耗器上进行更多调试:

  

Memprof是一个php扩展,可​​帮助查找那些内存消息代码段,特别是面向对象的代码。 [SOURCE]

EDIT2
作为新评论,请尝试通过memory_get_usage功能查看内存使用情况。在打电话给你的api之后。