Покажите код, это намного увеличит вероятность нахождения правильного решения.
Проблемы может быть две:
1) При каждой итерации создаются новые объекты и не очищаются по завершению
2) Объекты очищаются, но из-за большого размера и малого количества не обрабатываются сборщиком мусора
Для решения первой проблемы достаточно делать unset для ненужных объектов
Для решения второй - делать gc_collect_cycles. Поскольку эта операция трудоемкая, можно делать ее раз в 10/100/1000 циклов, подберите сами.
На тему сборки мусора:
php.net/manual/ru/features.gc.performance-consider...
Если вкратце, сборщик мусора вызывается при достижении кол-ва неиспользуемых объектов 10000. Поэтому, если объекты большие и 10000 штук не влезает в память, будет переполнение.