Risoluzione dei problemi
Questa pagina mostra come risolvere i problemi relativi a Cloud Profiler.
Errori nella configurazione del progetto Google Cloud
Questa sezione elenca i problemi di configurazione che potresti riscontrare e fornisce suggerimenti su come risolverli.
L'API Cloud Profiler è disabilitata
Il seguente errore si verifica quando l'API Profiler non è abilitata per il tuo progetto Google Cloud :
failed to create a profile, will retry: rpc error: code = PermissionDenied desc = Cloud Profiler API has not been used in project 012345 before or it is disabled.
Per risolvere il problema, il tuo progetto Google Cloud deve avere l'API Profiler abilitata:
-
Enable the required API.
Se viene visualizzato il messaggio API abilitata, l'API è già abilitata. In caso contrario, fai clic sul pulsante Attiva.
Il chiamante non dispone dell'autorizzazione
Il seguente errore si verifica quando non hai l'autorizzazione per scrivere dati di profilazione in un progetto Google Cloud :
failed to create a profile, will retry: rpc error: code = PermissionDenied desc = The caller does not have permission.
Per risolvere il problema, chiedi all'amministratore di concederti autorizzazioni aggiuntive per il progetto. Per un elenco dettagliato dei ruoli e delle autorizzazioni richiesti, consulta Controllo dell'accesso.
Errori con Node.js
Questa sezione elenca i problemi che potresti riscontrare durante l'utilizzo dell'agente di profilazione Node.js e fornisce suggerimenti su come risolverli.
L'applicazione non viene chiusa normalmente con Node.js
L'agente di profilazione per Node.js interferisce con l'uscita normale del programma; possono essere necessarie fino a un'ora prima che il programma esca dopo il completamento di tutte le attività.
Per risolvere il problema,
invia un segnale SIGINT
, ad esempio utilizzando Ctrl-C
. Quando invii un segnale SIGINT
, il processo termina normalmente.
Errori con Python
Questa sezione elenca i problemi che potresti riscontrare durante l'utilizzo dell'agente di profilazione Python e fornisce suggerimenti su come risolverli.
Eccezione NotImplementedError
con Python
La seguente eccezione viene generata durante l'esecuzione della funzione start
quando l'applicazione viene eseguita in un ambiente non Linux:
NotImplementedError
Per risolvere il problema, esegui l'applicazione in un ambiente Linux.
Eccezione ValueError
con Python
La seguente eccezione viene generata durante start
quando gli argomenti della funzione non sono validi, quando non è possibile determinare le informazioni necessarie dalle variabili di ambiente e dagli argomenti oppure quando sia il profilo del tempo di CPU che quello del tempo reale sono disattivati:
ValueError
Per risolvere il problema, verifica quanto segue:
- Assicurati che il nome e la versione del servizio soddisfino i requisiti definiti in Argomenti del nome e della versione del servizio.
- Se la profilazione del muro è abilitata, assicurati che
start
venga chiamato dal thread principale. - Assicurati di utilizzare una versione supportata di Python e
che la profilazione del tempo della CPU o del tempo reale sia abilitata. Per saperne di più, consulta la funzione
start
. - Verifica di aver specificato il parametro
project_id
sustart
se l'esecuzione avviene al di fuori diGoogle Cloud. Per saperne di più, consulta la funzionestart
.
Errori di risorsa temporaneamente non disponibile con Python
Il log degli errori contiene le seguenti voci dopo l'attivazione di Profiler:
BlockingIOError: [Errno 11] Resource temporarily unavailable Exception ignored when trying to write to the signal wakeup fd
Questi messaggi vengono visualizzati quando un'applicazione si registra con il descrittore di file di riattivazione del segnale,
signal.set_wakeup_fd
.
Per impostazione predefinita, se il buffer del descrittore di file si riempie, viene registrato un avviso in stderr.
Quando Cloud Profiler raccoglie i profili, attiva segnali con frequenza elevata e può causare il riempimento del descrittore di file di segnale. Per il problema di GitHub, vedi BlockingIOError su App Engine.
Per risolvere il problema, esegui una delle seguenti operazioni:
Se la tua applicazione può essere eseguita in sicurezza quando i segnali vengono persi, puoi utilizzare Cloud Profiler. Se utilizzi Python 3.7 o versioni successive e vuoi disattivare i messaggi di avviso, passa
warn_on_full_buffer=False
come parametro asignal.set_wakeup_fd
.Se la tua applicazione non può essere eseguita in sicurezza quando i segnali vengono persi, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'uso continuato potrebbe causare la perdita dei numeri di segnale e un numero eccessivo di voci nel log degli errori.
Tutti i profili mancanti
Esistono due motivi comuni per cui potresti non visualizzare alcun profilo:
- Il servizio non è in esecuzione da tempo sufficiente per raccogliere i profili.
- Il servizio non è configurato per l'autenticazione.
Per risolvere i problemi relativi a un breve tempo di esecuzione, assicurati che il servizio venga eseguito ininterrottamente per almeno 3 minuti.
Per risolvere i problemi relativi all'autenticazione, assicurati che l'agente di profilazione possa scrivere dati nel tuo progetto Google Cloud :
Se il tuo servizio è in esecuzione su Google Cloud, l'autenticazione è automatica, tranne quando esegui il deployment di un container su Compute Engine. Quando esegui il deployment di un container su Compute Engine, devi specificare l'Google Cloud ID progetto nel comando
start
dell'agente Profiler. Per istruzioni, vedi Collegare l'agente a un Google Cloud progetto.Se il tuo servizio viene eseguito al di fuori di Google Cloud, devi creare un account di servizio e collegare l'agente Profiler al tuo progettoGoogle Cloud . Per maggiori informazioni, vedi Profilazione delle applicazioni in esecuzione al di fuori di Google Cloud.
Profili mancanti di un tipo specifico
Questa sezione elenca configurazioni specifiche in cui i profili per uno o più tipi di profilo non vengono raccolti. La prima sezione contiene contenuti generali e le sezioni rimanenti elencano i problemi per lingue specifiche.
Informazioni generali
Se vuoi visualizzare un tipo di profilo specifico, ma non sono disponibili profili di questo tipo, controlla quanto segue:
Assicurati che il tipo di profilo sia supportato per la lingua della tua applicazione. Per saperne di più, consulta Tipi di profilazione disponibili.
Assicurati di aver utilizzato una nuova versione del servizio dopo aver modificato i tipi di profili raccolti. Se non specifichi una nuova versione del servizio, viene utilizzato un deployment esistente e l'agente di profilazione non può trasferire i dati per il tipo di profilo appena abilitato. Per ulteriori informazioni sui deployment, vedi Raccolta dei profili.
Assicurati che il tipo di profilo sia abilitato. Alcuni tipi di profilo sono disattivati per impostazione predefinita. Per ulteriori informazioni, consulta le pagine delle singole lingue:
Le sezioni rimanenti di questa pagina descrivono le configurazioni specifiche per lingua in cui i dati per un tipo di profilo non vengono raccolti.
Go: i profili del tempo di CPU non vengono raccolti per c-archives
Quando un'applicazione Go viene creata con il flag -buildmode
impostato
su c-archive
o c-shared
, la profilazione del tempo CPU è
disattivata per impostazione predefinita. Vengono raccolti profili di heap, contesa e thread.
Per maggiori informazioni, consulta
GitHub issue #993: profiler not collecting CPU data for Go code in a c-archive.
Per risolvere il problema,
attiva la raccolta dei profili del tempo CPU prima delle chiamate di servizio
profiler.Start
e aggiungi una chiamata a
signal.Notify(make(chan os.Signal), syscall.SIGPROF)
.
Per maggiori informazioni su signal.Notify
, vedi
func Notify
.
Java: I profili heap non vengono raccolti quando sono attivati più profiler
Hai attivato più profiler heap per un'applicazione Java e non hai profili.
Il campionatore heap Java è abilitato come funzionalità dell'agente autonomo. L'effetto è che è possibile utilizzare un solo profiler alla volta. È stato aperto un bug per estendere Java in modo da supportare più profiler heap. Per informazioni su questo bug, vedi Aggiungere il supporto multi-agente per il meccanismo di campionamento dell'heap.
Per risolvere il problema, attiva un profiler.
Python: nessun tempo CPU e nessun profilo Wall quando si utilizza uWSGI
Quando
uWSGI
utilizza più worker per gestire le richieste, il comportamento
predefinito consiste nell'eseguire l'inizializzazione dell'applicazione solo nel
processo principale (master
). I processi forkati non eseguono la
sequenza di inizializzazione.
Se configuri l'agente di profilazione nella sequenza di inizializzazione dell'applicazione, ad esempio lo configuri nel metodo AppConfig.ready()
di un'applicazione Django, l'agente di profilazione non viene configurato per i processi fork.
Per risolvere il problema,
esegui l'inizializzazione dell'applicazione in tutti i processi di lavoro impostando il flag
lazy-apps
su true
.
Python: sono presenti profili del tempo della CPU, ma non profili Wall quando si utilizza uWSGI
Il Profiler di Wall dipende dal modulo di segnali Python. Quando l'interprete Python viene compilato con il supporto dei thread, la configurazione predefinita disattiva la gestione personalizzata dei segnali per i processi forked.
Per risolvere il problema,
per le applicazioni uWSGI, attiva la gestione personalizzata dei segnali impostando il flag
py-call-osafterfork
su true
.
Python: nessun profilo per i processi fork
Gli agenti di profilazione possono profilare solo il processo che ha avviato l'agente.
Per risolvere il problema, se la tua applicazione esegue il fork dei processi e se vuoi raccogliere profili dai processi forkati, inizializza l'agente dopo il fork.