cuducos / minha-receita

🏢 Sua API web para consulta de informações do CNPJ da Receita Federal
https://minhareceita.org
MIT License
1.32k stars 132 forks source link

Etapa transform sempre trava nos 53% #185

Closed wandersonsousa closed 1 year ago

wandersonsousa commented 1 year ago

Estou usando o banco de dados do dockercompose minha-receita, porém ele nunca consegue finalizar a primeira etapa que é: Processing base CNPJ, partners and taxes.

Já tentei diversos comandos, a últimas tentativa foi da seguinte forma: docker-compose run --rm minha-receita transform -d /mnt/data/ --no-privacy --max-parallel-db-queries=1 --batch-size=1024

Minha máquina: MacBook Pro (16 polegadas, 2021) processador: Apple M1 Max ram: 32 GB 1TB

cuducos commented 1 year ago

Alguns detalhes para a gente entender melhor:

Não costumo utilzar o Docker para os dados completos. Apenas mantenho para facilitar os testes e desenvolvimento. Se puder testar sem o Docker, pode ser uma boa ; )

wandersonsousa commented 1 year ago

Tenho cerca de 800GB disponível. Estou processando os últimos dados da receita. Sobre a questão de configurar os limites de armazenamento do docker, creio que seja o problema, vou testar e retorno com o resultado, em caso de o resultado ser negativo, vou testar sem o docker

carlsonwf commented 1 year ago

Relatei um problema que pode ser relacionado (ou não).

https://github.com/cuducos/minha-receita/issues/189#issue-1814712983

Estou testando a importação de uma base mais antiga... De qualquer forma, @wandersonsousa, coloque aí os logs do postgres e da própria aplicação pra gente tentar entender melhor o que passa.

carlsonwf commented 1 year ago

Tentei a importação com os dados de 15/01/2023.

Log do postgres:

2023-07-20 17:49:29.058 -03 [14880] ERROR:  invalid byte sequence for encoding "UTF8": 0x00
2023-07-20 17:49:29.058 -03 [14880] CONTEXT:  COPY cnpj, line 6545, column json
2023-07-20 17:49:29.058 -03 [14880] STATEMENT:  copy "cnpj" ( "id", "json" ) from stdin binary;
2023-07-20 17:49:29.801 -03 [8868] ERROR:  invalid byte sequence for encoding "UTF8": 0x00
2023-07-20 17:49:29.801 -03 [8868] CONTEXT:  COPY cnpj, line 7620, column json
2023-07-20 17:49:29.801 -03 [8868] STATEMENT:  copy "cnpj" ( "id", "json" ) from stdin binary;
2023-07-20 17:49:30.098 -03 [9312] LOG:  could not receive data from client: An existing connection was forcibly closed by the remote host.

Log no console

Processing base CNPJ, partners and taxes 100% |█████████████████████████████████████████████████████████████| (108762489/108762489, 68926 it/s)
2023/07/20 17:42:27 Loading Estabelecimentos files…
Creating the JSON data for each CNPJ   9% |█████                                                            | (5308416/55155262, 22246 it/s) [6m26s:37m20s]panic: send on closed channel

goroutine 73620684 [running]:

goroutine 73620684 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc00ffb33b0, 0xc0003b8120?)
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel

goroutine 73620770 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc00ffb33b0, 0xc000164120?)
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel

goroutine 73620685 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc00ffb33b0, 0xc0003b8120?)
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel

goroutine 73620689 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc00ffb33b0, 0xc0661dc000?)
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
        C:/Users/W11/OneDrive/Documents/ItsBrain/Dev/Projetos/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel
cuducos commented 1 year ago

Estou testando a importação de uma base mais antiga

Qual exatamente?

Você pode também verificar os pontos que mencionei anteriormente? Isso ajuda muito a eu te ajudar…

carlsonwf commented 1 year ago

Estou testando a importação de uma base mais antiga

Qual exatamente?

Você pode também verificar os pontos que mencionei anteriormente? Isso ajuda muito a eu te ajudar…

Foi mal. Base de 15/01/2023. Estou tentando agora com a de 17/12/2022.

To com 35gb livre e nao estou usando docker, fiz o build do app

cuducos commented 1 year ago

To com 35gb livre

É pouco.

cuducos commented 1 year ago

O erro que você está tendo (existing connection was forcibly closed by the remote host) também pode indicar sobrecarga nos recursos computacionais como CPU e memória, segundo esse artigo.

ralexsander commented 1 year ago

Testando no Mac M1 aqui travou em 58%, provavelmente foi por espaço em disco disponível para o container, pois a transformação usa bastante espaço no /tmp também... ao rodar nativamente deu certo

cuducos commented 1 year ago

pois a transformação usa bastante espaço no /tmp também

Sim. Só para corroborar essa afirmação: os 113 milhões de registros de base do CNPJ, sócios e dados fiscais são carregados em um banco de dados de chave/valor (é a parte Processing base CNPJ, partners and taxes). E é no diretório temporário que esse banco de dados fica.

Estou processando os dados de julho agora, está em 27% e esse diretório já tem 3Gb:

$ du -hd1 /tmp | grep minha
3.0G    /tmp/minha-receita-badger-1661591632

Com certeza ele passa dos 10Gb (pois muito dado ainda está em memória, já que o Badger faz essas artimanhas para poder ser rápido na escrita).

ATUALIZAÇÃO

Errei! Ficou com menos que 10Gb:

$ du -hd1 /tmp | grep minha
8.2G    /tmp/minha-receita-badger-1661591632
carlsonwf commented 1 year ago

Eu provisionei uma maquina com 16gb de RAM e 250GB de espaço livre. Deu certo.

Provavelmente o problema tenha sido o espaço em disco, mas não pensei nisso porque, no momento que dava erro, eu ainda tinha bastante espaço livre (bastante, entenda-se cerca de 10gb).

Obrigado pela força!

wandersonsousa commented 1 year ago

Instalei o postgres localmente e resolveu