В моем приложении PHP есть сценарий импорта, который может импортировать записи.
На данный момент он импортируется из файла CSV. Он читает каждую строку файла CSV, по одной строке за раз, используя fgetcsv, и для каждой строки выполняет много обработки этой записи, включая запросы к базе данных, а затем переходит к следующая строка. Ему не нужно постоянно накапливать больше памяти.
После импорта примерно 2500 записей PHP умирает, говоря, что он превысил свой предел памяти (132 МБ или около того).
Сам файл CSV занимает всего пару мегабайт - другая обработка, которая происходит, выполняет множество сравнений строк, различий и т. Д. У меня есть огромное количество кода, работающего с ним, и было бы трудно придумать `` наименьшее воспроизведение ''. образец'.
Какие есть хорошие способы найти и исправить такую проблему?
Обнаружена причина проблемы
У меня есть класс отладки, который регистрирует все мои запросы к базе данных во время выполнения. Итак, эти строки SQL размером около 30 КБ остались в памяти. Я понимаю, что это не подходит для скриптов, рассчитанных на долгую работу.
Могут быть и другие источники утечек памяти, но я почти уверен, что это причина моей проблемы.
simple_query
вместо обычногоquery
метода и уменьшил использование памяти в 10 раз. - person Matthew Smith   schedule 03.05.2011