Risoluzione dei problemi

Questa pagina mostra come risolvere i problemi relativi a Cloud Profiler.

Errori con la configurazione di your Google Cloud project

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 Google Cloud progetto:

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, l' Google Cloud API Profiler deve essere abilitata per your project:

  1. Abilita l'API Cloud Profiler.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilitare l'API

  2. Se viene visualizzato il messaggio API abilitata, l'API è già abilitata. In caso contrario, fai clic sul pulsante Abilita.

Il chiamante non dispone dell'autorizzazione

Il seguente errore si verifica quando non hai l'autorizzazione per scrivere i dati di profilazione in un Google Cloud progetto:

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 viene chiusa normalmente con Node.js

L'agente di profilazione per Node.js interferisce con la normale chiusura del programma; potrebbero essere necessarie fino a un'ora prima che il programma si chiuda 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 quando utilizzi l'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 o quando la profilazione del tempo di CPU e del tempo totale di esecuzione è disabilitata:

ValueError

Per risolvere il problema, controlla quanto segue:

  • Assicurati che il nome e la versione del servizio soddisfino i requisiti definiti in Argomenti nome e versione del servizio.
  • Se la profilazione del tempo reale è abilitata, assicurati che start venga chiamata dal thread principale.
  • Assicurati di utilizzare una versione supportata di Python e che la profilazione del tempo di CPU o del tempo totale di esecuzione sia abilitata. Per ulteriori informazioni, consulta la funzione start.
  • Verifica di aver specificato il project_id parametro per start se esegui l'applicazione al di fuori di Google Cloud. Per ulteriori informazioni, consulta la funzione start.

Errori di risorsa temporaneamente non disponibile con Python

Il log degli errori contiene le seguenti voci dopo l'abilitazione 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 del 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 i segnali con alta frequenza e può causare il riempimento del descrittore del file di segnale. Per il problema di GitHub, vedi BlockingIOError su App Engine.

Per risolvere questo problema, procedi in uno dei seguenti modi:

  • Se l'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 disabilitare i messaggi di avviso, passa warn_on_full_buffer=False come parametro a signal.set_wakeup_fd.

  • Se l'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.

Mancano tutti i profili

Esistono due motivi comuni per cui potresti non visualizzare alcun profilo:

  • Il servizio non è in esecuzione da un periodo di tempo sufficiente per la raccolta dei profili.
  • Il servizio non è configurato per l'autenticazione.

Per risolvere i problemi relativi a un breve periodo di esecuzione, assicurati che il servizio sia in esecuzione continua per almeno 3 minuti.

Per risolvere i problemi relativi all'autenticazione, assicurati che l'agente di profilazione possa scrivere i dati in your Google Cloud project:

Mancano i profili di un tipo specifico

Questa sezione elenca le configurazioni specifiche in cui non vengono raccolti i profili per uno o più tipi di profili. La prima sezione contiene contenuti generali, mentre le sezioni rimanenti elencano i problemi relativi a linguaggi specifici.

Informazioni generali

Se vuoi visualizzare un tipo di profilo specifico, ma non sono disponibili profili di questo tipo, controlla quanto segue:

Le sezioni rimanenti di questa pagina descrivono le configurazioni specifiche del linguaggio in cui non vengono raccolti i dati per un tipo di profilo.

Go: i profili del tempo della 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 della CPU è disabilitata per impostazione predefinita. Vengono raccolti i profili di heap, contesa e thread. Per ulteriori informazioni, vedi il problema di GitHub n. 993: profiler non raccoglie i dati della CPU per il codice Go in un archivio c.

Per risolvere il problema, abilita la raccolta dei profili del tempo della CPU prima che il servizio chiami profiler.Start, e aggiungi una chiamata a signal.Notify(make(chan os.Signal), syscall.SIGPROF). Per ulteriori informazioni su signal.Notify, vedi func Notify.

Java: i profili heap non vengono raccolti quando sono abilitati più profiler

Hai abilitato più profiler heap per un'applicazione Java e non hai profili.

Il campionatore heap Java è abilitato come funzionalità dell'agente autonomo. Di conseguenza, è 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 heap.

Per risolvere il problema, abilita un profiler.

Python: nessun profilo del tempo della CPU e del tempo reale 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 fork non eseguono la sequenza di inizializzazione.

Se configuri l'agente di profilazione nella sequenza di inizializzazione dell'applicazione, ad esempio se configuri l'agente di profilazione nel metodo di un'applicazione Django, l'agente di profilazione non viene configurato per i processi fork.AppConfig.ready()

Per risolvere il problema, esegui l'inizializzazione dell'applicazione in tutti i processi worker impostando il flag lazy-apps su true.

Python: sono presenti profili del tempo della CPU, ma non profili del tempo reale quando si utilizza uWSGI

Il profiler Wall dipende dal modulo di segnale Python. Quando l'interprete Python viene compilato con il supporto dei thread, la configurazione predefinita disabilita la gestione dei segnali personalizzati per i processi fork.

Per risolvere il problema, per le applicazioni uWSGI, abilita la gestione dei segnali personalizzati 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 l'applicazione esegue il fork dei processi e vuoi raccogliere i profili dai processi fork, inizializza l'agente dopo il fork.