Opinioni sull'accesso alle applicazioni multiprocesso

2

Abbiamo scritto un'applicazione che genera almeno 9 processi paralleli. Tutti i processi generano molte informazioni di registrazione.

Attualmente stiamo usando il QueueHandler di Python per consolidare tutti i log in un unico file. Sfortunatamente, a volte questo risulta in file molto confusi che sono difficili da leggere (rendendo difficile tracciare esattamente cosa sta succedendo in un thread).

Pensi che sia una valida opzione per separare tutti i messaggi in file dedicati? O questo renderà le cose ancora più disordinate, a causa dell'elevato numero di file?

Quali sono le tue esperienze generali durante la scrittura di file di registro per applicazioni multiprocesso / multithreading?

    
posta chkorn 08.12.2012 - 01:22
fonte

3 risposte

3

Contrassegna ogni riga di registro con l'id di processo come identificativo, quindi usa grep quando guarda i log. O qualcos'altro oltre all'ID del processo.

    
risposta data 08.12.2012 - 01:47
fonte
1

Preferisco lasciare che ogni processo registri nel proprio file e poi unirli insieme se necessario / voluto. In questo modo non devo concurrency / contention su un singolo file di log. Essendo processi separati, gli eventi del registro sono comunque piuttosto disgiunti.

Per quanto riguarda le prestazioni, questo è il modo più efficiente per gestirlo. L'unione dei file di log è in genere dispendiosa, dal momento che nessuno ne legge la maggior parte comunque, mi limiterei a farlo su richiesta.

Se utilizzi principalmente i tuoi file di registro come strumenti di debug invece degli scopi di controllo e ti aiuta a far funzionare il tuo codice o a risolvere problemi di multi-threading, l'unione di file di log può comportare la perdita dell'ordine degli eventi a meno che tu non possa usare un timer di risoluzione sufficientemente elevato da includere negli eventi del registro. Tuttavia la tua scommessa più sicura sarebbe quella di accedere a un servizio di registro di qualche tipo che si sincronizza per te.

    
risposta data 08.12.2012 - 01:45
fonte
0

Dipende molto dalla tua applicazione e dal modo in cui analizzi i log. Considera il caso estremo del server di fascia alta in cui hai molti thread che interagiscono tutti. Consaldare questo in un log time in una singola coda e scrivere in un file in ordine di tempo consente di determinare in modo abbastanza preciso che l'evento in cui si verificano gli eventi è una soluzione, ma una soluzione migliore sarebbe avere più registri, fare in modo che ogni evento del registro registri segna il tempo, quindi usa lo splunk per eseguire l'analisi.

    
risposta data 08.12.2012 - 12:41
fonte

Leggi altre domande sui tag