Risolvere i problemi

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

Errori relativi alla 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 questo problema, nel tuo progetto Google Cloud deve essere abilitata l'API Profiler:

  1. Nel pannello di navigazione della console Google Cloud, seleziona API e servizi, fai clic su Abilita API e servizi e abilita l'API Cloud Profiler:

    Vai alle impostazioni dell'API Profiler

  2. Se viene visualizzato API abilitata, significa che l'API è già abilitata. In caso contrario, fai clic sul pulsante Attiva.

Il chiamante non dispone dell'autorizzazione

Quando non hai l'autorizzazione per scrivere dati di profilazione in un progetto Google Cloud, si verifica il seguente errore:

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 delle autorizzazioni e dei ruoli richiesti, vedi 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; l'uscita del programma può richiedere fino a un'ora dopo il completamento di tutte le attività.

Per risolvere il problema, emetti un indicatore SIGINT, ad esempio utilizzando Ctrl-C. Quando invii un indicatore SIGINT, il processo si arresta automaticamente.

Errori con Python

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

NotImplementedError eccezione 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.

ValueError eccezione 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 e dagli argomenti di ambiente o quando sono disabilitati i profili del tempo di CPU e del tempo di esecuzione:

ValueError

Per risolvere il problema, verifica quanto segue:

  • Assicurati che il nome e la versione del servizio soddisfino i requisiti definiti in Argomenti di versione e nome 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 di CPU o del tempo di esecuzione sia abilitata. Per ulteriori informazioni, consulta la sezione Funzione start.
  • Verifica di aver specificato il parametro project_id su start se stai eseguendo l'esecuzione al di fuori di Google Cloud. Per maggiori informazioni, consulta la sezione Funzione start.

Errori delle risorse temporaneamente non disponibili con Python

Il log degli errori contiene le seguenti voci dopo aver abilitato 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 wakeup del segnale signal.set_wakeup_fd. Per impostazione predefinita, se il buffer del descrittore del file si riempie, viene registrato un avviso su stderr.

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

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

  • Se la tua applicazione può essere eseguita in modo sicuro quando gli indicatori 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 la tua applicazione non può essere eseguita in modo sicuro quando gli indicatori vengono persi, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'uso continuativo potrebbe causare la perdita dei numeri di indicatori 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 abbastanza a lungo da consentire la raccolta dei profili.
  • Il servizio non è configurato per l'autenticazione.

Per risolvere i problemi relativi a un breve tempo 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 dati nel 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 il tuo ID progetto Google Cloud nel comando start dell'agente Profiler. Per le istruzioni, consulta Collegamento dell'agente a un progetto Google Cloud.

  • Se il servizio è in esecuzione 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 la sezione Profilazione all'esterno di Google Cloud.

Profili specifici mancanti

Questa sezione elenca le configurazioni specifiche in cui i profili per uno o più tipi di profili non vengono raccolti. La prima sezione presenta contenuti generali, mentre le altre sezioni 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, verifica quanto segue:

Le altre sezioni 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 di CPU non vengono 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 di CPU è disattivata per impostazione predefinita. Vengono raccolti i profili heap, contese e thread. Per maggiori informazioni, consulta GitHub issue #993: profiler non raccoglie dati della CPU per il codice Go in un c-archive.

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

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

Hai attivato più profiler heap per un'applicazione Java, ma non hai profili.

Il campionatore heap Java è abilitato come funzionalità di agente singolo. Di conseguenza, può essere in uso un solo profiler alla volta. È stato aperto un bug per estendere Java al supporto di più profiler heap. Per informazioni su quel 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 di CPU e nessun profilo Wall 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 creati con 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 AppConfig.ready() di un'applicazione Django, l'agente di profilazione non sarà configurato per i processi di cui è stato eseguito il fork.

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

Python: avere profili tempo di CPU, ma nessun profilo Wall quando si utilizza uWSGI

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

Per risolvere il problema, per le applicazioni uWSGI abilita la gestione degli indicatori personalizzati impostando il flag py-call-osafterfork su true.

Python: nessun profilo per i processi con fork

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

Per risolvere il problema, se le tue applicazioni fork vengono elaborate e se vuoi raccogliere profili dai processi fork, inizializza l'agente dopo il fork.