В моем приложении PHP есть скрипт импорта, который может импортировать записи.
В данный момент он импортируется из файла CSV. Он читает каждую строку файла CSV, по одной строке за раз, используя fgetcsv, и для каждой строки выполняет много обработки этой записи, включая запросы к базе данных, а затем переходит к следующей линия. Не нужно продолжать накапливать больше памяти.
После примерно 2500 импортированных записей PHP умирает, говоря, что он исчерпал лимит памяти (132 МБ или около того).
CSV-файл сам по себе - всего пара мегабайт - другая обработка, которая происходит, выполняет много сравнений строк, различий и т. Д. У меня огромное количество кода, работающего с ним, и было бы сложно придумать «Наименьший воспроизводящий образец».
Как можно найти и устранить такую проблему?
Обнаружена причина проблемы
У меня есть класс отладки, который регистрирует все мои запросы к базе данных во время выполнения. Таким образом, эти строки SQL длиной около 30 КБ оставались в памяти. Я понимаю, что это не подходит для сценариев, предназначенных для длительного использования.
Могут быть и другие источники утечек памяти, но я вполне уверен, что это является причиной моей проблемы.