Risolvere i problemi

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

Errori con la 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 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. Per accedere alle impostazioni dell'API Profiler per il tuo progetto, procedi nel seguente modo:

  1. Fai clic su Vai alle impostazioni API Profiler.

  2. Nella barra degli strumenti, seleziona il tuo progetto Google Cloud.

  3. Se viene visualizzato Abilita, fai clic su questo pulsante per abilitare l'API Cloud Profiler. In caso contrario, l'API Cloud Profiler è già abilitata.

Il chiamante non dispone dell'autorizzazione necessaria

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 tale progetto. Per un elenco dettagliato delle autorizzazioni e dei ruoli 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 si chiude normalmente con Node.js

L'agente di profilazione per Node.js interferisce con la normale uscita del programma; il completamento del programma può richiedere fino a un'ora dopo il completamento di tutte le attività.

Per risolvere il problema, invia un indicatore SIGINT, ad esempio utilizzando Ctrl-C. Quando invii un indicatore SIGINT, il processo termina normalmente.

Errori con Python

Questa sezione elenca i problemi che potresti riscontrare durante l'utilizzo dell'agente di profilazione di Python e fornisce suggerimenti su come risolverli.

NotImplementedError eccezione con Python

Durante l'esecuzione della funzione start viene eseguita l'eccezione seguente 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 generata durante il giorno start quando gli argomenti della funzione non sono validi, quando non è possibile determinare le informazioni necessarie in base alle variabili di ambiente e agli argomenti, o quando sia la profilazione del tempo di CPU che il tempo totale di esecuzione sono disabilitate:

ValueError

Per risolvere questo problema, verifica quanto segue:

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

Errori di risorsa temporaneamente non disponibili 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 si verificano quando un'applicazione si registra con il descrittore del file di wakeup del segnale, signal.set_wakeup_fd. Per impostazione predefinita, se il buffer del descrittore del file viene riempito, un avviso viene registrato come stderr.

Quando Cloud Profiler raccoglie profili, attiva i segnali ad alta frequenza e può riempire il descrittore del file di indicatori. Per il problema GitHub, consulta la pagina BlockIOError su App Engine.

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

  • Se la tua applicazione può essere eseguita in sicurezza in caso di perdita dei segnali, puoi utilizzare Cloud Profiler. Se utilizzi Python 3.7 o versioni successive e vuoi disattivare i messaggi di avviso, passa il parametro warn_on_full_buffer=False come parametro a signal.set_wakeup_fd.

  • Se l'applicazione non può essere eseguita in sicurezza in caso di perdita dei segnali, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'utilizzo continuato potrebbe causare la perdita di 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 è abbastanza lungo da consentire la raccolta di profili.
  • Il servizio non è configurato per l'autenticazione.

Per risolvere i problemi relativi a una breve esecuzione, assicurati che il servizio venga eseguito continuamente per almeno tre minuti.

Per risolvere i problemi relativi all'autenticazione, assicurati che l'agente di profilazione possa scrivere dati sul tuo progetto Google Cloud:

  • Se il 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'ID progetto di Google Cloud nel comando dell'agente Profilerstart. Per le istruzioni, consulta la pagina sul collegamento dell'agente a un progetto Google Cloud.

  • Se il servizio è in esecuzione all'esterno di Google Cloud, devi creare un account di servizio e collegare l'agente Profiler al progetto Google Cloud. Per ulteriori informazioni, consulta la pagina relativa alla profilazione all'esterno di Google Cloud.

Profili mancanti di un tipo specifico

Questa sezione elenca configurazioni specifiche in cui non vengono raccolti i profili per uno o più tipi di profilo. La prima sezione presenta 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 quel tipo, controlla quanto segue:

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

Go: i profili tempo CPU non sono raccolti per c-archives

Quando viene creata un'applicazione Go 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, consulta il problema GitHub 993: profiler che non raccoglie i dati della CPU per il codice Go in un archivio c.

Per risolvere il problema, attiva la raccolta dei profili temporali della CPU prima delle chiamate dei servizi profiler.Start e aggiungi una chiamata a signal.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 abilitato più profiler di heap per un'applicazione Java e non hai profili.

Il campione dell'heap Java viene attivato come funzionalità per singolo agente. L'effetto è che può essere utilizzato un solo profiler alla volta. È stato aperto un bug per estendere Java e supportare più profiler di heap. Per informazioni su questo bug, consulta Aggiungere il supporto multi-agente per il meccanismo di campionamento heap.

Per risolvere il problema, abilita un profiler.

Python: nessun tempo CPU e nessun profilo Wall durante l'utilizzo di uWSGI

Quando uWSGI utilizza più worker per gestire le richieste, il comportamento predefinito prevede l'inizializzazione dell'applicazione solo nel processo principale (master). I processi a forcella 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 AppConfig.ready() di un'applicazione Django, l'agente di profilazione non è configurato per i processi a forcella.

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

Python: profili utente CPU, ma nessun profilo Wall quando si utilizza uWSGI

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

Per risolvere questo problema, per le applicazioni uWSGI, abilita la gestione del segnale personalizzato impostando il flag py-call-osafterfork su true.

Python: nessun profilo per i processi fork

Gli agenti di profilazione possono solo profilare il processo che ha avviato l'agente.

Per risolvere questo problema, se l'applicazione esegue il fork dei processi e se vuoi raccogliere profili dai processi fork, inizializza l'agente dopo il fork.