Profilazione delle applicazioni Node.js
In questa pagina viene descritto come modificare l'applicazione Node.js per l'acquisizione profilazione dei dati e l'invio di questi dati al tuo account Google Cloud progetto. Per informazioni generali sulla profilazione, consulta Concetti di profilazione.
Tipi di profilo per Node.js:
- Heap
- Tempo totale di esecuzione
Versioni del linguaggio Node.js supportate:
- Node.js 14 o versioni successive
- Per il criterio di rilascio di Node.js, consulta Programma delle release.
Versioni dell'agente di profilazione supportate:
- È supportata la versione più recente dell'agente. In generale, le release meno recenti oltre un anno non sono supportate. Ti consigliamo di utilizzare una versione rilasciata di recente dell'agente.
Sistemi operativi supportati:
- Linux. Il profiling delle applicazioni Node.js è supportato per i kernel Linux la cui libreria C standard è implementata con
glibc
o conmusl
. Per informazioni sulla configurazione specifiche per i kernel Linux Alpine, consulta Esecuzione su Linux Alpine.
Ambienti supportati:
- Compute Engine
- Google Kubernetes Engine (GKE)
- Ambiente flessibile di App Engine
- Ambiente standard di App Engine
- Al di fuori di Google Cloud (per informazioni sui requisiti di configurazione aggiuntivi, consulta Eseguire il profiling delle applicazioni in esecuzione all'esterno di Google Cloud).
Attivazione dell'API Profiler
Prima di utilizzare l'agente di profilazione, assicurati che l'elemento sottostante L'API Profiler è abilitata. Puoi controllare lo stato dell'API e abilitare e, se necessario, utilizzando Google Cloud CLI la console Google Cloud:
Interfaccia a riga di comando gcloud
Se non hai già installato Google Cloud CLI sul tuo consulta la documentazione di Google Cloud CLI.
Esegui questo comando:
gcloud services enable cloudprofiler.googleapis.com
Per ulteriori informazioni, consulta
gcloud services
.
Console Google Cloud
-
Enable the required API.
Se viene visualizzato il messaggio API abilitata, significa che l'API è già abilitata. In caso contrario, fai clic sul pulsante Attiva.
Utilizzo di Cloud Profiler
In tutti gli ambienti supportati, puoi utilizzare il profiler installando il pacchetto @google-cloud/profiler
, aggiungendo un'istruzione require
alla tua applicazione ed eseguendo il deployment dell'applicazione nel modo consueto.
Prima di installare @google-cloud/profiler
Il pacchetto @google-cloud/profiler
dipende da un modulo nativo. I file binari precompilati per questo modulo nativo sono disponibili per Linux e Alpine Linux per Node 14 e 16. Non sono richieste dipendenze aggiuntive.
@google-cloud/profiler
utilizza node-pre-gyp
per determinare quale codice binario precompilato installare.
Quando utilizzi @google-cloud/profiler
in altri ambienti che non dispongono di
binari predefiniti, il modulo
node-gyp
viene utilizzato per creare programmi binari.
Per informazioni sulle dipendenze necessarie per creare file binari con
node-gyp
, leggi l'installazione di node-gyp
documentazione.
Installazione
Per installare la versione più recente di Cloud Profiler:
npm install --save @google-cloud/profiler
Se utilizzi anche l'agente Trace, quando modifichi l'applicazione, importa il pacchetto Profiler dopo il pacchetto dell'agente Trace (@google-cloud/trace-agent
).
Compute Engine
Per Compute Engine, segui questi passaggi:
Installa la versione più recente di Cloud Profiler:
npm install --save @google-cloud/profiler
Modifica il codice
require
dell'applicazione per creare un oggettoserviceContext
che assegni aservice
il nome del servizio di cui viene eseguito il profilo. Facoltativamente, puoi assegnare aversion
la versione del servizio di cui viene eseguito il profilo. Per ulteriori informazioni, consulta Argomenti Nome servizio e versione informazioni su queste opzioni di configurazione:
GKE
Per GKE, svolgi i seguenti passaggi:
Modifica il tuo Dockerfile per installare il pacchetto Profiler:
FROM node:10 ... RUN npm install @google-cloud/profiler
Modifica il codice
require
dell'applicazione per creare un oggettoserviceContext
che assegni aservice
il nome del servizio di cui viene eseguito il profilo. Facoltativamente, puoi assegnareversion
la versione del servizio che viene profilato. Per ulteriori informazioni, consulta Argomenti Nome servizio e versione informazioni su queste opzioni di configurazione:
App Engine
Per l'ambiente flessibile di App Engine e per App Engine
nell'ambiente standard, il codice require
è simile al seguente:
In App Engine, i parametri service
e version
derivano dalla
dell'ambiente di rete, in modo da non doverli specificare. Pertanto, non è necessario
crea un oggetto serviceContext
.
Analisi dei dati
Dopo che Profiler ha raccolto i dati, puoi visualizzare e analizzare questi dati utilizzando l'interfaccia Profiler.
Nella console Google Cloud, vai alla pagina Profiler:
Puoi trovare questa pagina anche utilizzando la barra di ricerca.
Argomenti nome e versione del servizio
Quando carichi l'agente Profiler, specifichi un argomento service-name e un un argomento facoltativo service-version per configurarlo.
Il nome del servizio consente a Profiler di raccogliere i dati di profilazione per tutte le repliche del servizio. Il servizio di profilazione garantisce un tasso di raccolta di un profilo al minuto, in media, per ogni nome di servizio in tutte le versioni e le zone dei servizi combinati.
Ad esempio, se hai un servizio con due versioni in esecuzione su repliche in tre zone, il profiler creerà in media 6 profili al minuto per quel servizio.
Se utilizzi nomi di servizi diversi per le repliche, il servizio verrà sottoposto a profilazione più spesso del necessario, con un overhead di conseguenza più elevato.
Quando selezioni il nome di un servizio:
Scegli un nome che rappresenti chiaramente il servizio nell'architettura dell'applicazione. La scelta del nome del servizio è meno importante se esegui solo un singolo servizio o una singola applicazione. È più importante se la tua applicazione viene eseguita come un insieme di microservizi, ad esempio.
Assicurati di non utilizzare valori specifici per il processo, ad esempio un ID processo, nella stringa del nome del servizio.
La stringa del nome del servizio deve corrispondere a questa espressione regolare:
^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$
Una buona linea guida è usare una stringa statica come imageproc-service
come
il nome del servizio.
La versione del servizio è facoltativa. Se specifichi la versione del servizio, Profiler può aggregare le informazioni di profilazione da più le istanze VM e visualizzarle correttamente. Può essere usato per contrassegnare versioni diverse dei servizi durante il loro deployment. La UI di Profiler ti consente filtrare i dati in base alla versione del servizio; In questo modo, puoi confrontare il rendimento delle versioni più vecchie e più recenti del codice.
Il valore dell'argomento service-version è una stringa in formato libero, ma valori
per questo argomento generalmente sono i numeri di versione, ad esempio
1.0.0
o 2.1.2
.
Logging agente
L'agente di profilazione può segnalare le informazioni di logging. Per abilitare il logging,
imposta l'opzione logLevel
all'avvio dell'agente.
I valori logLevel
supportati sono:
0
: disattiva tutto il logging dell'agente.1
: abilita il logging degli errori.2
: attiva il logging degli avvisi (impostazione predefinita).3
: attiva il logging delle informazioni.4
: attiva il logging di debug.
Imposta il valore logLevel
nello stesso oggetto che fornisce il contesto del servizio:
require('@google-cloud/profiler').start({
serviceContext: { ... }
logLevel: 3
});
Esecuzione con Linux Alpine
L'agente di profilazione Node.js per Linux Alpine è supportato solo per le configurazioni di Google Kubernetes Engine.
Errore di build
Se esegui npm install
e la build non riesce e restituisce il seguente errore:
nel Dockerfile mancano alcune dipendenze di build:
ERR! stack Error: not found: make
Per risolvere il problema, aggiungi la seguente istruzione alla fase di compilazione del Dockerfile:
RUN apk add python3 g++ make
Errore di autenticazione
Se utilizzi immagini Docker eseguite con
Linux alpino
(ad es. golang:alpine
o solo alpine
),
potrebbe essere visualizzato il seguente errore di autenticazione:
connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"
Tieni presente che, per visualizzare l'errore, devi avere abilitato il logging dell'agente.
L'errore indica che le immagini Docker con Linux Alpine non hanno i certificati SSL di root installati per impostazione predefinita. Questi certificati sono necessari per consentire all'agente di profilazione di comunicare con l'API profiler. Per risolvere questo errore, aggiungi il seguente comando apk
al tuo Dockerfile:
FROM alpine
...
RUN apk add --no-cache ca-certificates
Devi quindi ricreare la build ed eseguire nuovamente il deployment dell'applicazione.
Problemi noti
L'agente di profilazione per Node.js interferisce con la normale uscita del programma. L'uscita del programma può richiedere fino a un'ora al termine di tutte le attività al suo interno. Quando emetti un SIGINT,
utilizzando Ctrl-C
, questo determina l'arresto controllato del processo.
Passaggi successivi
- Selezionare i profili da analizzare
- Interagire con il grafico a fiamme
- Filtrare il grafico a fiamme
- Metti a fuoco il grafico a fiamme
- Confrontare i profili