Já passei por algo parecido quando tentava processar ficheiros grandes de uma vez e percebi que o problema não era só memória - era o facto de estar a carregar tudo de uma vez no RAM. Com um CSV de 500MB, se tentares ler o arquivo inteiro e depois processar, vais ficar sem memória rapidinho. A solução é usar streams em vez de carregar tudo para memória. No Node.js tens o módulo `fs.createReadStream()` que te permite ler o ficheiro aos bocadinhos. Se estiveres com bibliotecas tipo `csv-parser`, consegues encadear streams para processar linha a linha sem sobrecarregar a RAM.
Outra coisa que mudou para mim foi perceber que até com streams, se a tua lógica de processamento for lenta (tipo operações síncronas no loop, queries à BD sem batch), vais criar um gargalo. Quando o stream fornece dados mais rápido do que tu consegues processar, a memória acumula à mesma. Usa `pause()` e `resume()` para controlar o fluxo, ou implementa back-pressure adequadamente. Se estiveres a fazer queries à base de dados para cada linha, mete-as em batch - tipo, agrupa 1000 linhas e faz uma só operação em vez de 1000 separadas.
Qual é mais ou menos a operação que estás a fazer com os dados do CSV? E estás a guardar os resultados nalgum lado (ficheiro, base de dados) ou só a processar e devolver pela API? A resposta ajuda porque o problema pode estar também na forma como estás a enviar a resposta ao cliente.