Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\OutOfMemoryError
Иногда при запросах время от времени возникает следующая ошибка:
[2020-04-23 11:41:22] request.CRITICAL: Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\OutOfMemoryError: "Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 17844416 bytes)" at /home/wgpavell/symfony-blog/vendor/symfony/cache/Traits/FilesystemTrait.php line 100 {"exception":"[object] (Symfony\Component\ErrorHandler\Error\OutOfMemoryError(code: 0): Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 17844416 bytes) at /home/wgpavell/symfony-blog/vendor/symfony/cache/Traits/FilesystemTrait.php:100)"} []
В редких случаях вариация ошибки бывает такой:
[2020-04-24 16:56:25] request.CRITICAL: Uncaught PHP Exception Symfony\Component\ErrorHandler\Error\OutOfMemoryError: "Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 10489856 bytes)" at /home/wgpavell/symfony-blog/vendor/graze/guzzle-jsonrpc/src/functions.php line 82 {"exception":"[object] (Symfony\Component\ErrorHandler\Error\OutOfMemoryError(code: 0): Error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 10489856 bytes) at /home/wgpavell/symfony-blog/vendor/graze/guzzle-jsonrpc/src/functions.php:82)"} []
Не могу понять в чем дело, но подозреваю этот участок кода у себя:
$cache = new FilesystemAdapter();
$maps = $cache->get('zabbix_maps', function (ItemInterface $item) use ($client) {
$item->expiresAfter(3600);
$response = $client->request('map.get', [
"output" => "extend",
"selectSelements" => "extend",
]);
return $response->getResult();
});
С чем это может быть связано и как это можно вылечить? Использую Symfony 4.4.5, в качестве клиента ZabbixClient. Мне нужно иметь данные о картах с заббикса, но вытаскивать их при каждом запросе долго, поэтому я кэширую данные на час. Возможно, я неверно это делаю? Ошибка возникает редко, с периодичностью 2-4 раза в день.
Ответы (1 шт):
В php.ini у вас есть параметр memory_limit который по умолчанию составляет 128 мегабайт. Попросту иногда памяти для хранения данных у вас требуется больше нежели выделено одному процессу. Это совершенно ни какая не ошибка с вашей стороны, естественно.
Соответственно решение проблемы банально донельзя. Увеличьте значение данного параметра.
p.s.
Достаточно хорошей практикой является создание отдельного файла с измененными вами параметрами, который вы потом помещаете в conf.d папку в настройках вашего php. По сути они перезаписывают стандартные параметры. Ну, а удобство в том что вы всегда знаете что именно у вас изменено вами и можете там же произвести дополнительные манипуляции с параметрами и ища их в php.ini