Cloud Profiler è un profiler statistico a basso costo generale raccoglie informazioni sull'utilizzo della CPU e sull'allocazione della memoria dalla tua produzione diverse applicazioni. Per maggiori dettagli, consulta Concetti di profilazione. Per risolvere i problemi o monitorare le prestazioni della pipeline, utilizza l'integrazione di Dataflow con Cloud Profiler per identificare le parti del codice della pipeline che consumano più risorse.
Per suggerimenti per la risoluzione dei problemi e strategie di debug per la creazione o l'esecuzione della pipeline Dataflow, consulta Risoluzione dei problemi e debug delle pipeline.
Prima di iniziare
Comprendi i concetti di profilazione e familiarizati con l'interfaccia di Profiler. Per informazioni su come iniziare a utilizzare Profiler dell'interfaccia, vedi Seleziona i profili da analizzare.
L'API Cloud Profiler deve essere abilitata per il tuo progetto prima di avviare il job.
Viene attivato automaticamente la prima volta che visiti la pagina del Profiler.
In alternativa, puoi attivare l'API Cloud Profiler utilizzando lo strumento a riga di comando gcloud
Google Cloud CLI o la console Google Cloud.
Per utilizzare Cloud Profiler, il tuo progetto deve avere una quota sufficiente.
Inoltre,
account di servizio worker
per il job Dataflow deve avere
le autorizzazioni appropriate per Profiler. Ad esempio, per creare i profili, l'account di servizio del worker deve disporre dell'autorizzazione cloudprofiler.profiles.create
, inclusa nel ruolo IAM Agente Cloud Profiler (roles/cloudprofiler.agent
).
Per ulteriori informazioni, consulta Controllo dell'accesso con IAM.
Attivare Cloud Profiler per le pipeline Dataflow
Cloud Profiler è disponibile per le pipeline Dataflow scritte in SDK Apache Beam per Java e Python, versione 2.33.0 o successive. Le pipeline in Python devono utilizzare Dataflow Runner v2. Cloud Profiler può essere attivato all'avvio della pipeline. L'overhead di CPU e memoria ammortizzati è dovrebbe essere inferiore all'1% per le tue pipeline.
Java
Per abilitare il profiling della CPU, avvia la pipeline con la seguente opzione.
--dataflowServiceOptions=enable_google_cloud_profiler
Per abilitare la profilazione heap, avvia la pipeline con le opzioni seguenti. Profilazione heap richiede Java 11 o versioni successive.
--dataflowServiceOptions=enable_google_cloud_profiler
--dataflowServiceOptions=enable_google_cloud_heap_sampling
Python
Per utilizzare Cloud Profiler, la pipeline Python deve essere eseguita con Dataflow Runner v2.
Per abilitare il profiling della CPU, avvia la pipeline con la seguente opzione. La profilazione dell'heap non è ancora supportata per Python.
--dataflow_service_options=enable_google_cloud_profiler
Vai
Per abilitare la profilazione di CPU e heap, avvia la pipeline con la seguente opzione.
--dataflow_service_options=enable_google_cloud_profiler
Se esegui il deployment delle pipeline da modelli Dataflow e vuoi abilitare Cloud Profiler,
specificare i enable_google_cloud_profiler
e
enable_google_cloud_heap_sampling
segnalazioni come esperimenti aggiuntivi.
Console
Se utilizzi un modello fornito da Google , puoi specificare i flag nel Dataflow Crea del job da modello nel campo Esperimenti aggiuntivi.
gcloud
Se utilizzi Google Cloud CLI per eseguire
di modelli, gcloud
dataflow jobs run
o gcloud dataflow flex-template run
, a seconda
il tipo di modello, utilizza --additional-experiments
per specificare i flag.
API
Se utilizzi l'API REST per eseguire i modelli, a seconda del tipo di modello, specifica i flag utilizzando il campo additionalExperiments
dell'ambiente di runtime, RuntimeEnvironment
o FlexTemplateRuntimeEnvironment
.
Visualizza i dati di profilazione
Se Cloud Profiler è attivato, nella pagina del job viene visualizzato un link alla pagina di Profiler.
Nella pagina Profiler puoi anche trovare i dati di profilazione per la tua pipeline Dataflow. Servizio è il nome del job e Versione è l'ID job.
Utilizzo di Cloud Profiler
La pagina Profiler contiene un grafico a fiamme che mostra le statistiche per ciascun frame in esecuzione su un worker. In orizzontale, puoi vedere il tempo di esecuzione di ogni frame in termini di tempo di CPU. In direzione verticale, puoi vedere le analisi dello stack e il codice in esecuzione in parallelo. Le analisi dello stack sono dominate dal codice dell'infrastruttura runner. Per scopi di debug, in genere ci interessa l'esecuzione del codice utente, che in genere si trova vicino alle estremità inferiori del grafico. Il codice utente può essere identificato cercando i frame degli indicatori, che rappresentano il codice runner che è noto per chiamare solo il codice dell'utente. Nel caso del runner ParDo di Beam, viene creato un livello di adattatore dinamico per invocare la firma del metodo DoFn fornita dall'utente. Questo livello può essere identificato come frame con il suffisso invokeProcessElement. L'immagine seguente mostra una dimostrazione di come trovare un riquadro dell'indicatore.
Dopo aver fatto clic su un frame di indicatori interessante, il grafico a fiamme si concentra su quell'analisi dello stack, dando un'idea di un codice utente a lunga esecuzione. Le operazioni più lente possono indicare dove si sono formati colli di bottiglia e presentano opportunità di ottimizzazione. Nell'esempio seguente, è possibile vedere che il windowing globale viene utilizzato con un ByteArrayCoder. In questo caso, il codice potrebbe essere un'area ottimale per l'ottimizzazione perché occupa molto tempo della CPU rispetto alle operazioni di ArrayList e HashMap.
Risolvere i problemi di Cloud Profiler
Se abiliti Cloud Profiler e la tua pipeline non genera profilazione la causa potrebbe essere una delle seguenti.
La pipeline utilizza una versione precedente dell'SDK Apache Beam. Per utilizzare Cloud Profiler, devi utilizzare la versione 2.33.0 o successive dell'SDK Apache Beam. Puoi visualizzare la versione dell'SDK Apache Beam della tua pipeline nella pagina del job. Se il job viene creato da modelli Dataflow, i modelli devono utilizzare le versioni dell'SDK supportate.
Il progetto sta per esaurire la quota di Cloud Profiler. Puoi visualizzare l'utilizzo della quota dalla pagina delle quote del progetto. Se viene superata la quota di Cloud Profiler, può verificarsi un errore come
Failed to collect and upload profile whose profile type is WALL
. Il servizio Cloud Profiler rifiuta i dati di profilazione se hai raggiunto la quota. Per ulteriori informazioni sulle quote di Cloud Profiler, consulta Quote e limiti.Il job non è stato eseguito abbastanza a lungo per generare dati per Cloud Profiler. I job eseguiti per brevi periodi, ad esempio meno di cinque minuti, potrebbero non fornire dati di profilazione sufficienti per consentire a Cloud Profiler di generare risultati.
L'agente Cloud Profiler viene installato durante il worker Dataflow
avvio automatico. I messaggi di log generati da Cloud Profiler sono disponibili nel log
digita dataflow.googleapis.com/worker-startup
.
A volte esiste la profilazione dei dati, ma Cloud Profiler non ne mostra nessuno.
come output. Profiler mostra un messaggio simile a There were
profiles collected for the specified time range, but none match the current
filters
.
Per risolvere il problema, prova a seguire la procedura di risoluzione dei problemi riportata di seguito.
Assicurati che l'intervallo di tempo e l'ora di fine nel profiler includano il tempo trascorso del job.
Verifica che nel Profiler sia selezionato il job corretto. Service è il nome del job.
Verifica che l'opzione pipeline
job_name
abbia lo stesso valore del nome del job nella pagina del job Dataflow.Se hai specificato un argomento service-name quando hai caricato l'agente Profiler, verifica che il nome del servizio sia configurato correttamente.