Concetti di profilazione

La profilazione è una forma di analisi del codice dinamico. Acquisisci le caratteristiche l'applicazione durante l'esecuzione. Queste informazioni vengono utilizzate per identificare come rendere la tua applicazione più veloce ed efficiente.

In passato, la profilazione veniva eseguita solo durante lo sviluppo dell'applicazione. Questo basato sulla capacità di sviluppare test di carico e benchmark che sia in grado di prevedere con precisione un ambiente di produzione.

La profilazione continua si riferisce alla profilazione dell'applicazione durante la sua esecuzione. in un ambiente di produzione. Questo approccio riduce la necessità di sviluppare test e benchmark di carico predittivo accurati per l'ambiente di produzione. La ricerca sulla profilazione continua ha dimostrato che è accurata e conveniente*.

Cloud Profiler è uno strumento di profilazione continua progettato per di Compute Engine in esecuzione su Google Cloud:

  • È un profiler statistico, o campionario, con un ed è adatto agli ambienti di produzione.

  • Supporta lingue comuni e raccoglie più tipi di profilo. Consulta Tipi di profilazione disponibili per una panoramica.

Configurazione di un'applicazione Google Cloud per generare dati del profilo è un semplice processo una tantum: collegare o eseguire il servizio con una profilazione con un agente umano. Dopo il deployment dell'applicazione, L'agente di profilazione viene eseguito periodicamente per raccogliere dati sul rendimento e poi invia questi dati al tuo progetto Google Cloud. Per maggiori dettagli su questa procedura, consulta Raccolta profilo.

Dopo aver raccolto i dati del profilo per la tua applicazione, puoi analizzare i dati utilizzando l'interfaccia Profiler. L'analisi dei dati del profilo è in genere un processo iterativo che si basa sui tuoi del design dell'applicazione e del suo linguaggio di programmazione.

*Vedi quanto segue Profilazione a livello di Google: un'infrastruttura di profilazione continua per i data center e Profilazione continua: dove sono finiti tutti i cicli?.

Tipi di profilazione disponibili

La seguente tabella riassume i tipi di profili supportati:

Tipo di profilo Vai Java Node.js Python
Tempo CPU YY Y
Heap YY Y
Heap allocato Y
Contesa Y
Thread Y
Tempo totale di esecuzione Y YY

Il resto di questa sezione fornisce maggiori dettagli su ciascuno di questi i tipi di profilo.

Misurazioni del tempo

  • Il tempo CPU è il tempo impiegato dalla CPU per l'esecuzione di un blocco di codice.

    Il tempo di CPU per una funzione indica per quanto tempo la CPU è rimasta impegnata nell'esecuzione instructions. Non include il tempo impiegato dalla CPU stava aspettando o elaborando le istruzioni per qualcos'altro.

  • L'ora di muro (detta anche tempo reale) è il tempo necessario eseguire un blocco di codice.

    Il tempo reale di una funzione misura il tempo trascorso tra entrando e uscendo da una funzione. Il tempo reale include tutti i tempi di attesa, incluso quello per i blocchi e la sincronizzazione dei thread. Il tempo totale di esecuzione per un blocco di codice non può mai essere inferiore al tempo di CPU.

Se il tempo reale è più lungo di quello di CPU, indica che il codice trascorre tempo ad attendere. Quando la differenza è la tua applicazione potrebbe avere un collo di bottiglia delle risorse.

Se il tempo di CPU è simile al tempo totale di esecuzione, significa che richiede un uso intensivo della CPU; quasi tutto il tempo necessario per l'esecuzione viene speso per la CPU. Potrebbero essere candidati blocchi di codice che richiedono un uso intensivo della CPU e ottimizzazione.

Utilizzo heap (memoria)

  • L'utilizzo dell'heap (chiamato anche heap) è la quantità di memoria allocata nell'heap del programma nel momento in cui il profilo viene raccolto. Non mi piace altri tipi di profili in cui i dati vengono raccolti in un intervallo, questo il tipo di profilo raccoglie l'utilizzo dell'heap in un singolo momento.

  • L'allocazione dell'heap (detta anche heap allocato) è l'importo totale di memoria allocata nell'heap del programma durante l'intervallo cui è stato raccolto il profilo. Questo valore include qualsiasi memoria allocati, sono stati liberati e non sono più in uso. Ad esempio, considera un job che ripete la seguente sequenza: alloca 1 MiB, attende 500 msec, libera 1 MiB, attende 500 msec. Nei 10 secondi in cui raccolto il profilo heap allocato, ci sono 10 allocazioni 10 libere. Questo profilo mostrerebbe uno heap allocato di 10 MiB, perché le risorse gratuite non sono considerati. La tariffa media dell'allocazione è 10 MiB/10 secondi o 1 MiB al secondo.

La profilazione dell'utilizzo dell'heap ti consente di individuare potenziali inefficienze e memoria fughe di notizie nei tuoi programmi. La profilazione delle allocazioni dell'heap ti aiuta a sapere quale le allocazioni causano il maggior lavoro del garbage collector.

Informazioni sui thread

Le applicazioni che creano thread possono presentare thread bloccati e perdite di thread:

  • I thread bloccati sono thread creati, ma in attesa di un blocco. Questi thread non sono attualmente in esecuzione e potrebbero non essere mai eseguiti. Tuttavia, potrebbe essere eseguito un thread bloccato.
  • Le fughe di thread si verificano quando il numero di thread creati continua ad aumentare.

I thread bloccati sono una delle cause della divulgazione di thread.

A livello di frame, il profilo Thread mostra il numero medio di thread che includono il frame. Questo tipo di profilo raccoglie l'utilizzo dei thread a un un singolo momento.

Contesa

In un programma multi-thread, il tempo di attesa per serializzare l'accesso a una risorsa condivisa può essere significativo. Informazioni sul comportamento dei conflitti possono guidare la progettazione del codice e fornire informazioni per le prestazioni dell'ottimizzazione.

Raccolta profilo

Il ruolo dell'agente profiler è acquisire i dati del profilo dalla tua applicazione e trasmettere questi dati al backend di Profiler utilizzando l'API Profiler. Ogni profilo è per una singola istanza di e include quattro campi che identificano in modo univoco il suo deployment:

  • Progetto Google Cloud
  • Nome applicazione
  • Zona di applicazione
  • Versione applicazione

Quando un agente è pronto ad acquisire un profilo, emette un profiler il comando API al backend Profiler. Il backend riceve e, nello scenario più semplice, risponde immediatamente all'agente. La response specifica il tipo di profilo da acquisire. In risposta, l'agente acquisisce il profilo e lo trasmette al backend. Infine, il profiler Il backend associa il profilo al tuo progetto Google Cloud. Puoi e quindi di visualizzarlo e analizzarlo utilizzando l'interfaccia di Profiler.

La sequenza effettiva di handshake è più complessa di quanto descritto nella precedente paragrafo. Ad esempio, quando il profiler riceve una richiesta da un agente, il backend controlla per determinare se ha ricevuto richieste precedenti dall'agente. In caso contrario, il backend aggiunge le informazioni sull'agente al proprio database. Un nuovo deployment viene creato se i campi di deployment dell'agente non corrispondono alle impostazioni degli altri dell'agente registrato.

In media, ogni minuto e per ogni deployment e ogni tipo di profilo, seleziona un agente e gli indica di acquisire un profilo. Ad esempio, se gli agenti per un deployment supportano heap e tempo totale di esecuzione profilazione, in media vengono acquisiti due profili al minuto:

  • Per tutti i tipi di profilo, ad eccezione dell'utilizzo dell'heap e dei thread, profilo singolo rappresenta i dati raccolti per 10 secondi.

  • Utilizzo dell'heap e profili dei thread raccolti all'istante.

Dopo che l'agente invia una notifica al profiler pronto per acquisire i dati, l'agente rimane inattivo fino a quando risposte con il tipo di profilo da acquisire. Se hai 10 istanze di un'applicazione in esecuzione nello stesso deployment, si creano 10 agenti di profilazione. Tuttavia, la maggior parte delle volte questi agenti sono inattivi. Nell'arco di 10 minuti sono previsti 10 profili. ciascun agente riceve in media una risposta per ogni tipo di profilo. Poiché è coinvolta una certa randomizzazione, il numero effettivo potrebbe variare.

Il backend di Profiler utilizza le quote dell'API Profiler campi di deployment del profilo per limitare i profili importati. Per informazioni sulla visualizzazione e la gestione delle quote di Profiler, consulta Quote e limiti.

Analisi dei dati

Dopo che Profiler ha raccolto i dati, puoi visualizzare e analizzare questi dati utilizzando l'interfaccia Profiler.

Nella console Google Cloud, vai alla pagina Profiler:

Vai a Profiler

Puoi trovare questa pagina anche utilizzando la barra di ricerca.