Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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.

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 questo problema, il tuo progetto Google Cloud deve avere l'API Profiler abilitata. Per accedere alle impostazioni dell'API Profiler per il tuo progetto:

  1. Fai clic su Vai alle impostazioni dell'API Profiler.

  2. Seleziona il tuo progetto Google Cloud nella barra degli strumenti.

  3. Se è visualizzato Abilita, fai clic su questo pulsante per abilitare l'API Cloud Profiler. Altrimenti, 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 i 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 in 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 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; può richiedere fino a un'ora per uscire dal programma dopo il completamento di tutte le attività nel programma.

Per risolvere il problema, emetti un indicatore SIGINT, ad esempio utilizzando Ctrl-C. Quando emetti un indicatore SIGINT, la procedura termina senza problemi.

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

Viene generata la seguente eccezione 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 e dagli argomenti dell'ambiente oppure quando sono disattivati sia la profilazione del tempo di CPU che quella del tempo di parete:

ValueError

Per risolvere questo 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 la profilazione delle pareti è attivata, assicurati che start venga chiamata dal thread principale.
  • Assicurati di utilizzare una versione supportata di Python e che la CPU o la profilazione dei tempi di accesso a CPU siano abilitate. Per ulteriori informazioni, consulta la funzione start.
  • Verifica di aver specificato il parametro project_id in start se esegui l'esecuzione al di fuori di Google Cloud. Per maggiori informazioni, consulta la funzione start.

Errori relativi alla risorsa temporaneamente non disponibili 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 si verificano quando un'applicazione viene registrata con il descrittore del file di riattivazione del segnale, signal.set_wakeup_fd. Per impostazione predefinita, se il buffer del descrittore del file viene riempito, viene mostrato un avviso allo stderr.

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

Per risolvere il problema, esegui una delle seguenti operazioni:

  • 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 disattivare 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 sicurezza in caso di perdita di indicatori, ti consigliamo di interrompere l'utilizzo di Cloud Profiler. L'uso continuato potrebbe causare la perdita di numeri di segnale e voci eccessive nel log degli errori.

Tutti i profili mancanti

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

  • Il servizio non è abbastanza lungo da consentire 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 venga eseguito in modo continuo per almeno tre 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 progetto Google Cloud. Per scoprire di più, consulta la sezione Profilazione all'esterno di Google Cloud.

Profili mancanti di un tipo specifico

Questa sezione elenca 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 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 sezioni rimanenti 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 della CPU non vengono raccolti per c-archives

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

Per risolvere questo problema, attiva la raccolta di profili di tempo della CPU prima che il servizio chiami 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 più profiler sono attivati

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

Il campionatore heap Java è abilitato come funzionalità di agente individuale. Il risultato è che può essere utilizzato un solo profiler alla volta. È stato aperto un bug per estendere Java in modo che supporti più profiler Heap. Per informazioni sul bug, consulta la pagina Aggiungere il supporto multi-agente per il meccanismo di campionamento dell'Heap.

Per risolvere il problema, attiva un profiler.

Python: nessun tempo di CPU e profili 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 principale (master). I processi sottoposti a fork non eseguono la sequenza di inizializzazione.

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

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

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

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

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

Python: nessun profilo per i processi sottoposti a fork

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

Per risolvere il problema, se la tua applicazione forza i processi e se vuoi raccogliere profili dai processi generati con fork, inizializza l'agente dopo il fork.