qual è l'impatto della registrazione (o registrazione eccessiva) dei messaggi nel file di registro sulle prestazioni dell'applicazione?

0

La registrazione influisce sulle prestazioni delle applicazioni? La prima cosa da sapere è se i registri sono scritti in modo seriale mentre l'elaborazione avviene o sono registrati in un processo separato? In java world come dovrei migliorare le prestazioni della mia applicazione in cui ho bisogno di loggarmi molto in quel caso? L'ottimizzazione micro è un effetto collaterale, ma cerco l'impatto sulla messa dei messaggi di log nel codice java. Più tardi ho trovato, sembra che ci sia un impatto e log4j 2 sembra originato da questo impatto.

    
posta Mandrake 25.05.2018 - 18:06
fonte

2 risposte

2

Bene, vedo alcune possibilità riguardo ai problemi di performance, suppongo che il framework di logging che usi sia abbastanza decente da non essere la fonte del problema.

  • Registratore sincrono: se si configura la registrazione sincrona ovunque, tutta la discussione attende regolarmente di essere in grado di scrivere sul disco. La registrazione sincrona è adeguata per scopi di controllo in cui ogni registro di qualcosa che è stato fatto deve figurare.
  • Registrazione asincrona: richiederà più memoria e un po 'più di thread da gestire. Se la tua applicazione si interrompe, probabilmente perderai alcuni degli ultimi registri delle cose che sono state fatte. Quindi, se hai caricato troppo i tuoi registri, ci vorrà molta memoria, più risciacquo sul disco. Thread attenderà solo di essere in grado di ottenere il blocco sul buffer di memoria.
  • Problema sul lato dello sviluppo: a volte le prestazioni non provengono dalla configurazione ma dal modo in cui viene costruito il messaggio da loggare (concatenazione di stringhe, reintegrazione di oggetti multipli in lopo quando non necessario, ...), che richiedono memoria e cpu non necessarie ( e più garbage collection?).

Per riprendere: con la registrazione potresti avere problemi con:

  • elaborazione del blocco dell'utilizzo del disco in attesa della possibilità di scrittura.
  • consumo di memoria (e quindi eventualmente GC completo)
  • blocchi in memoria: quando si utilizza la registrazione asincrona, se si registra tutto in un singolo file è possibile che il thread inizi ad attendere un po 'di tempo per accedere al buffer in memoria memorizzando tutti i registri in sospeso da scrivere.
risposta data 05.06.2018 - 17:12
fonte
0

Dipende dal framework di logging che usi.

Avrà meno impatto sulle prestazioni, se la registrazione viene eseguita in modo asincrono e l'invio dei messaggi di registro è più o meno un'operazione di accodamento in 1a posizione.
Ciò potrebbe però cambiare il comportamento riguardo alle possibili condizioni di gara del tuo codice.

È necessario prendere in considerazione un impatto sulle prestazioni più ampio, se la registrazione viene implementata in modo sincrono e i messaggi di registro vengono scaricati direttamente nel file di registro.

    
risposta data 25.05.2018 - 18:11
fonte

Leggi altre domande sui tag