Если не хватает памяти, то без выделения памяти никак не обойтись.
Допустим по /api/products/all вы хотите получить все товары магазина.
В таком случае реализация контроллера будет что-то типа "SELECT * FROM products > json_encode > response".
Если в вашем магазине миллион товаров, то уже на уровне запроса к БД будет исчерпан лимит памяти.
Как вариант, увеличивать лимит памяти именно под этот конкретный запрос.
Либо, можно попробовать отдавать частями по 1к позиций /api/products/all?offset=1000
Либо, можно раз в 5 минут в фоне запускать большой скрипт с максимальным кол-вом памяти, который будет выбирать все товары, сериализовать и класть в какой-то файл типа products_all.json и уже по запросу к /api/products/all выдавать этот файл (возможно выдавать ссылку на файл, чтобы переложить отдачу контента на nginx)