Утечка памяти Symfony и монолог и консоль
Я провел последние 2 часа, пытаясь найти утечку памяти.
- Оптимизирована доктрина массовой обработки
- Оптимизировал мой отрывок и все эти аннотации к доктрине
- Оптимизирован SQL Logger
- Сценарий все еще протекает
- Решил закомментировать ведение журнала, потому что я ничего не мог сделать в любом случае
Получается что
- Более 40 000 итераций без записи в журнал при каждом n, но с модулем 50, начало mem: 28 мб, end mem: 30 мб
- Более 5 000 итераций с регистрацией при каждом n, без модуля, начало mem: 28 МБ, конец mem 38 МБ.
пример
# this leaks
# start mem: 28 mb end mem: 38mb, n = 5k
foreach ($this->queryData->iterate() as $j => $data):
declare(ticks = 1);
self::$currentAd++;
$this->em->detach($data[0]);
$this->logger->info(LogUtility::getMemoryUsage() . " (" . self::$currentAd .")");
if(self::$currentAd === 40000 ):
break(2);
endif;
endforeach;
# this doesn't leak
# start mem: 28 mb end mem: 30mb, n = 40k
foreach ($this->queryData->iterate() as $j => $data):
declare(ticks = 1);
self::$currentAd++;
$this->em->detach($data[0]);
if(self::$currentAd % 50 == 0):
$this->logger->info(LogUtility::getMemoryUsage() . " (" . self::$currentAd .")");
endif;
if(self::$currentAd === 40000 ):
break(2);
endif;
endforeach;
мой монолог конфиг:
handlers:
test:
type: stream
path: "%kernel.logs_dir%/immobilier/test.log"
level: debug
channels: test
console:
type: console
bubble: false
verbosity_levels:
VERBOSITY_VERBOSE: INFO
VERBOSITY_VERY_VERBOSE: DEBUG
channels: [test]
Любые предложения, чтобы исправить это?
2 ответа
Решение
Нашел решение. Я не могу сказать вам точные причины, почему такая утечка памяти происходит, однако в соответствии с этим; Добавление --no-debug
Вариант с вашей командой решает проблему. Это на самом деле сделал, и это даже уменьшило память на 2 МБ. Ура!
В дополнение к ответу @delmalki вы можете проверить, есть ли у вас fingers_crossed
обработчик и установите buffer_size
:
monolog:
handlers:
main:
type: fingers_crossed
action_level: critical
handler: grouped
excluded_404s:
- ^
buffer_size: 30
Забавно, что когда я добавляю эту опцию, использование памяти фактически удваивается. Вызов мусора, похоже, тоже не решает эту проблему.