italia / verificac19-sdk

✅ Official VerificaC19 Node.js SDK
MIT License
49 stars 17 forks source link

Consumo memoria #22

Closed anversoft closed 2 years ago

anversoft commented 2 years ago

Issue content

Sto utilizzando pm2 come load balancer e gestione processi per un backend in azienda. Quando arrivo la mattina mi accorgo che il processo sul quale gira NodeJS utilizza 700/800 MB di memoria (a fronte dei 30/40 MB con la versione SDK 0.5.1).

Il processo esegue periodicamente (ogni 4 ore) Service.updateAll() per tener aggiornato il database (il programma gira 24/7).

Non ho ancora profilato il consumo di memoria ma sospetto che qualche dato proveniente dalla cache non viene smaltito correttamente dal garbage collector.

Grazie mille in anticipo e complimenti per l'SDK!

astagi commented 2 years ago

Ciao @anversoft molto interessante! Che versione in particolare stai usando dell'SDK? Dalla 0.5.1 cambia il supporto alla DRL e di conseguenza l'aggiunta di MongoDB.

anversoft commented 2 years ago

Grazie per la risposta @astagi, sto utilizzando la versione 0.7.0, ho già creato il database Mongo su docker e basta, per il resto il codice è uguale identico a prima.

astagi commented 2 years ago

Grazie per la risposta @astagi, sto utilizzando la versione 0.7.0, ho già creato il database Mongo su docker e basta, per il resto il codice è uguale identico a prima.

Ottimo, grazie dell'info, provo anch'io in parallelo.

anversoft commented 2 years ago

Attualmente non sto utilizzando il programma di validazione ma in backend continua ad accumulare (l'ho riavviato questa mattina alle 8 circa)

image

astagi commented 2 years ago

Interessante @anversoft .. domanda hai modo di vedere anche quante connessioni attive ci sono su MongoDB? La mia paura è che gli oggetti di connessione per qualche motivo rimangono appesi e non vengono rimossi correttamente dal GC.

anversoft commented 2 years ago

Forse hai ragione, questo è l'output della console { current: 18, available: 838842, totalCreated: 47239, active: 3, exhaustIsMaster: 0, exhaustHello: 2, awaitingTopologyChanges: 19 }

Ora provo a riavviare il servizio

anversoft commented 2 years ago

Non credo sia questo il problema (questo è l'output dopo aver riavviato il servizio): { current: 18, available: 838842, totalCreated: 47539, active: 3, exhaustIsMaster: 0, exhaustHello: 2, awaitingTopologyChanges: 19 }

image

astagi commented 2 years ago

Per capire @anversoft se non chiamiamo l'updateAll il problema non sussiste giusto? è a ogni chiamata dell'updateAll che si incrementa la memoria?

anversoft commented 2 years ago

Sinceramente non so dirtelo perché il programma funziona in automatico, però deduco che sia quello perché l'unica modifica fatta al programma è stata quella di aggiornare la versione nel package.json

Il resto del codice è rimasto invariato.

astagi commented 2 years ago

@anversoft penso di aver individuato la causa, sembra che Mongoose detenga gli oggetti creati in memoria, vanno liberati manualmente altrimenti rimane il riferimento e il GC non li libera.. già che ci sono aggiorno anche Mongoose e provo, faccio una patch release e ti aggiorno

astagi commented 2 years ago

@anversoft 0.7.1 rilasciata https://www.npmjs.com/package/verificac19-sdk 🎉

Se non dovesse risolvere il problema faccio altri test più approfonditi, almeno adesso il campo di ricerca si restringe 😊

Grazie!

anversoft commented 2 years ago

Ottimo! Grazie mille a te per la collaborazione e la velocità! Se dovesse ripresentarsi riapro questo post.