Risoluzione dei problemi
Questa pagina mostra come risolvere i problemi di 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
Quando l'API Profiler non è abilitata per il progetto Google Cloud, si verifica il seguente errore:
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, nel progetto Google Cloud deve essere attivata l'API Profiler:
-
Enable the required API.
Se viene visualizzato il messaggio API abilitata, significa che 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 disponi dell'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 quando utilizzi l'agente di profilazione Node.js e fornisce suggerimenti su come risolverli.
L'applicazione non esce normalmente con Node.js
L'agente di profilazione per Node.js interferisce con la normale uscita del programma. L'uscita del programma può richiedere fino a un'ora al termine di tutte le attività al suo interno.
Per risolvere il problema,
emetti un indicatore SIGINT
, ad esempio utilizzando Ctrl-C
. Quando emetti un
segnale SIGINT
, il processo termina in modo corretto.
Errori con Python
Questa sezione elenca i problemi che potresti riscontrare quando utilizzi l'agente di profiling di Python e fornisce suggerimenti su come risolverli.
NotImplementedError
eccezione con Python
La seguente eccezione viene lanciata 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.
ValueError
eccezione con Python
La seguente eccezione viene lanciata durante start
quando gli argomenti della funzione non sono validi, quando non è possibile determinare le informazioni necessarie dalle variabili e dagli argomenti dell'ambiente o quando sono disabilitati sia il profiling del tempo CPU che quello del tempo di sistema:
ValueError
Per risolvere il problema, verifica quanto segue:
- Assicurati che il nome e la versione del servizio soddisfino i requisiti definiti in Argomenti nome e versione del servizio.
- Se il profilo della parete è abilitato, assicurati che
start
viene chiamato dal thread principale. - Assicurati di utilizzare una versione supportata di Python e che sia attivato il profiling del tempo CPU o del tempo di sistema. Per ulteriori informazioni, consulta la funzione
start
. - Verifica di aver specificato il parametro
project_id
comestart
se esegui l'operazione al di fuori di Google Cloud. Per ulteriori informazioni, consulta la funzionestart
.
Errori temporanei di disponibilità delle risorse con Python
Il log degli errori contiene le seguenti voci dopo aver attivato Profiler:
BlockingIOError: [Errno 11] Resource temporarily unavailable Exception ignored when trying to write to the signal wakeup fd
Questi messaggi si verificano quando un'applicazione si registra con il descrittore file di risveglio del segnale,
signal.set_wakeup_fd
.
Per impostazione predefinita, se il buffer del descrittore file si riempie, viene registrato un avviso in stderr.
Quando Cloud Profiler raccoglie i profili, attiva gli indicatori con frequenza elevata e può causare il riempimento del descrittore file dell'indicatore. Per il problema di GitHub, consulta BlockingIOError su App Engine.
Per risolvere il problema, esegui una delle seguenti operazioni:
Se la tua applicazione può funzionare 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 gli indicatori vengono persi, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'utilizzo continuato potrebbe causare la perdita di numeri di indicatori e voci eccessive nel log degli errori.
Mancano tutti i profili
Esistono due motivi comuni per cui potresti non visualizzare alcun profilo:
- Il servizio non è in esecuzione per un periodo di tempo sufficiente per la raccolta dei profili.
- Il servizio non è configurato per l'autenticazione.
Per risolvere i problemi relativi a un tempo di esecuzione breve, assicurati che il servizio funzioni continuamente 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 servizio è in esecuzione su Google Cloud, l'autenticazione è automatica, tranne quando esegui il deployment di un contenitore su Compute Engine. Quando esegui il deployment di un contenitore su Compute Engine, devi specificare il tuo ID progetto Google Cloud nel comando agente Profiler
start
. Per istruzioni, consulta Collegamento dell'agente a un progetto Google Cloud.Se il servizio viene eseguito al di fuori di Google Cloud, devi creare un account di servizio e collegare l'agente Profiler al tuo progetto Google Cloud. Per ulteriori informazioni, consulta Eseguire il profiling delle applicazioni in esecuzione all'esterno di Google Cloud.
Profili di un tipo specifico mancanti
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 relativi a 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 ulteriori informazioni, consulta Tipi di profilazione disponibili.
Assicurati di aver utilizzato una nuova versione del servizio dopo aver modificato i tipi di profilo 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 attivato. Per ulteriori informazioni sui deployment, consulta la pagina Raccolta dei profili.
Assicurati che il tipo di profilo sia attivo. Alcuni tipi di profili 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 della CPU non vengono raccolti per c-archives
Quando un'applicazione Go viene compilata con il flag -buildmode
impostato su c-archive
o c-shared
, il profiling del tempo della CPU è disabilitato per impostazione predefinita. Vengono raccolti i profili di heap, contesa e thread.
Per ulteriori informazioni, consulta
Issue 993 di GitHub: il profiler non raccoglie i dati della CPU per il codice Go in un archivio C.
Per risolvere il problema, attiva la raccolta dei profili di tempo della CPU prima delle chiamate del servizioprofiler.Start
e aggiungi una chiamata asignal.Notify(make(chan os.Signal), syscall.SIGPROF)
.
Per maggiori informazioni su signal.Notify
, consulta
func Notify
.
Java: i profili heap non vengono raccolti quando sono abilitati più profiler
Hai attivato più profiler dell'heap per un'applicazione Java e non hai profili.
Il sampler dell'heap Java è abilitato come funzionalità solo per gli agenti. L'effetto è che è possibile utilizzare un solo profiler alla volta. È stato aperto un bug per estendere Java in modo da supportare più profiler dell'heap. Per informazioni su questo bug, consulta Aggiungere il supporto di più agenti per il meccanismo di campionamento dell'heap.
Per risolvere il problema, attiva un profiler.
Python: nessun tempo CPU e nessun profilo di tempo di esecuzione quando si utilizza uWSGI
Quando
uWSGI
utilizza più worker per gestire le richieste, il comportamento predefinito è eseguire l'inizializzazione dell'applicazione solo nel processo primario (master
). I processi forkati non eseguono la sequenza di inizializzazione.
Se configuri l'agente di profilazione nella sequenza di inizializzazione della tua applicazione, ad esempio nel metodo AppConfig.ready()
di un'applicazione Django, l'agente di profilazione non è configurato per i processi derivati.
Per risolvere il problema,
esegui l'inizializzazione dell'applicazione in tutti i processi di lavoro impostando il flag
lazy-apps
su true
.
Python: sono disponibili profili del tempo della CPU, ma non profili del tempo reale quando si utilizza uWSGI
Il profiler di Wall dipende dal modulo Python signal. Quando l'interprete Python viene compilato con il supporto dei thread, la configurazione predefinita disattiva la gestione personalizzata degli indicatori per i processi derivati.
Per risolvere il problema,
per le applicazioni uWSGI, attiva la gestione dei segnali personalizzati impostando il flag
py-call-osafterfork
su true
.
Python: nessun profilo per i processi derivati
Gli agenti di profilazione possono eseguire il profiling solo del processo che ha avviato l'agente.
Per risolvere il problema, se la tua applicazione esegue il fork dei processi e vuoi raccogliere i profili dai processi forked, inizializza l'agente dopo il fork.