Risoluzione dei problemi

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

Errori relativi alla configurazione del tuo progetto Google Cloud

Questa sezione elenca i problemi di configurazione che potresti riscontrare 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, il progetto Google Cloud deve disporre API Profiler abilitata:

  1. Attiva l'API richiesta.

    Abilita l'API

  2. Se viene visualizzato 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 profilazione dei dati 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 quel 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 di Node.js dell'agente di profilazione, oltre a fornire suggerimenti per risolverli.

L'applicazione non si chiude normalmente con Node.js

L'agente di profilazione per Node.js interferisce con la normale uscita del programma; può essere necessaria fino a un'ora per uscire dal programma dopo sono state completate tutte le attività del programma.

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

Errori con Python

Questa sezione elenca i problemi che potresti riscontrare durante l'utilizzo dell'interfaccia dell'agente di profilazione, oltre a fornire suggerimenti per risolverli.

Eccezione NotImplementedError con Python

La seguente eccezione viene generata durante l'esecuzione di 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 la funzione argomenti non sono validi, quando le informazioni necessarie non possono essere determinate dal e argomenti di ambiente, o quando sia tempo di CPU che tempo di esecuzione la profilazione è disattivata:

ValueError

Per risolvere il problema, verifica quanto segue:

  • Assicurati che il nome e la versione del servizio soddisfino i requisiti definiti in Argomenti Nome servizio e versione.
  • Se la profilazione del wall è attiva, assicurati che start viene chiamato dal thread principale.
  • Assicurati di utilizzare una versione supportata di Python che la profilazione del tempo di CPU o del tempo di esecuzione sia attiva. Per maggiori informazioni delle informazioni, consulta la funzione start.
  • Verifica di aver specificato il project_id su start se stai eseguendo l'esecuzione al di fuori di in Google Cloud. Per ulteriori informazioni, vedi Funzione start.

Errori di risorsa temporaneamente non disponibili con Python

Dopo l'attivazione, il log degli errori contiene le seguenti voci 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 la riattivazione del segnale descrittore del file, signal.set_wakeup_fd Per impostazione predefinita, se il buffer del descrittore del file si riempie, viene visualizzato un avviso registrato in stderr.

Quando Cloud Profiler raccoglie i profili, attiva gli indicatori con frequenza elevata e può causare il riempimento del descrittore del file di indicatori. Per il problema di GitHub, vedi BlockIOError on App Engine.

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

  • Se l'applicazione può essere eseguita in modo sicuro quando vengono persi segnali, puoi utilizzare Cloud Profiler. Se usi Python 3.7, o in un secondo momento e vuoi disattivare i messaggi di avviso, quindi warn_on_full_buffer=False come parametro per signal.set_wakeup_fd

  • Se l'applicazione non può essere eseguita in modo sicuro quando vengono persi gli indicatori, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'uso continuato potrebbe causare la perdita dei numeri di indicatori e un uso eccessivo nel log degli errori.

Tutti i profili mancanti

Esistono due motivi comuni per cui potresti non vedere nessun profilo:

  • L'esecuzione del servizio non è sufficiente per 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 eseguito per almeno 3 minuti.

Per risolvere i problemi relativi all'autenticazione, assicurati che l'agente di profilazione possono 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 di un container su Compute Engine, devi specificare ID progetto Google Cloud nell'agente Profiler Comando start. Per istruzioni, vedi Collegamento dell'agente a un progetto Google Cloud.

  • Se il tuo servizio è in esecuzione al di fuori di Google Cloud, devi creare un account di servizio e collegare l'agente Profiler progetto Google Cloud. Per ulteriori informazioni, vedi Profilazione all'esterno di Google Cloud.

Mancano profili di un tipo specifico

Questa sezione elenca le configurazioni specifiche in cui i profili per uno o più tipi di profilo non vengono raccolti. La prima sezione include contenuti generali mentre le altre sezioni elencano problemi relativi a lingue specifiche.

Informazioni generali

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

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

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

Quando viene creata un'applicazione Go con il flag -buildmode impostato a c-archive o c-shared, la profilazione del tempo di CPU è è disabilitata per impostazione predefinita. Vengono raccolti profili di heap, contese e thread. Per ulteriori informazioni, vedi Problema 993 di GitHub: il profiler non raccoglie i dati della CPU per il codice Go in un archivio c.

Per risolvere il problema, abilita la raccolta di profili di tempo CPU prima delle chiamate di servizio 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 se sono abilitati più profiler

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

Il campionatore heap Java è abilitato come funzionalità di agente singolo. L'effetto è che può essere usato un solo profiler alla volta. È stato aperto un bug per estendere Java al fine di supportare più profiler Heap. Per informazioni insetto, consulta Aggiungi il supporto multi-agente per il meccanismo di campionamento dell'heap.

Per risolvere il problema, abilita un profiler.

Python: nessun tempo di CPU e nessun profilo Wall quando si utilizza uWSGI

Quando uWSGI utilizza più worker per gestire le richieste, l'impostazione predefinita è eseguire l'inizializzazione dell'applicazione solo principale (master). I processi creati con fork non eseguono sequenza di inizializzazione.

Se configuri l'agente di profilazione nell'inizializzazione dell'applicazione Ad esempio, configuri l'agente di profilazione nella AppConfig.ready() di un'applicazione Django, allora l'agente di profilazione non è configurato per i processi creati con fork.

Per risolvere il problema, eseguire l'inizializzazione dell'applicazione in tutti i processi worker impostando il flag app-pirate a true.

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

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

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

Python: nessun profilo per i processi creati con fork

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

Per risolvere il problema, se la tua applicazione crea un fork e se vuoi raccogliere profili da dei processi creati con fork, quindi inizializza l'agente dopo il fork.