Sto cercando una spiegazione semplice di come funziona gperftools. Finora, questo è quello che ho imparato:Come funzionano i gperftools?
- Gestisce un campionatore stop-the-world. In altre parole, interrompe periodicamente la profilazione del programma per raccogliere informazioni.
- La libreria pprof di Golang utilizza gperftools al di sotto.
Oltre ad una panoramica generale, qui ci sono alcune domande specifiche che vorrei risposto:
- È gperftools un "event based profiler" o "instrumentation profiler". Da quanto ho capito, questi profiler modificano il modo in cui un programma viene eseguito e raccolgono campioni tramite tali modifiche
- A quale 'livello' nel sistema operativo è presente il profilo gperftools? Ha il profilo del kernel come SystemTap o perf?
- gperftools è sicuro per essere eseguito su un server di produzione con traffico elevato?
Sto ponendo questa domanda alla ragione sull'overhead introdotto usando pprof su un server Go.
+1 Non è molto ben compreso come siano effettivamente i campioni di stack informativi, specialmente se vengono esaminati quelli individuali. Purtroppo, questa mancanza di comprensione porta all'assunzione generale che un gran numero di essi è necessario, e quindi devono essere riassunti (in tempo di auto-tempo, cumulativo, grafici delle chiamate, grafici di fiamma, ecc.) È molto facile per i grandi aumenti di velocità da nascondere in quei riepiloghi, ma non possono nascondersi da un programmatore solo esaminando un piccolo numero di campioni. [* Esempi. *] (Http://stackoverflow.com/a/25870103/23771) –
E SIGPROF è generato dal timer di intervallo, il ['setitimer()'] (http://man7.org/linux/man -pages/man2/setitimer.2.html) - https://github.com/gperftools/gperftools/blob/7822b5b0b9fa7e016e1f6b46ea86f26f4691a457/src/profile-handler.cc#L482 'setitimer (timer_type_, & timer, 0);' – osgx