500 ошибка - это ошибка в коде может быть, какой текст ошибки?
я бы делегировал часть процессов другим скриптам. например можно использовать какой нибудь сервер очередей вроде gearman, и инсерты в базу отправлять в background задание, а скрипту оставить только парсинг json. это растянет все во времени, зато снизит ресурсоемкость и увеличит стабильность.
плюс есть либы для "построчного" чтения json, может тоже поможет.
и какая версия пхп, может течет что-нибудь?