13 Profiling del software per eseguire il debug del problema relativo alle prestazioni dell’applicazione

Lo scopo della tua applicazione è servire bene i tuoi utenti finali.

Deve essere veloce, reattivo, facile da usare e affidabile, tra le altre funzionalità desiderabili.

Ma mantenere il tuo software in un modo che continui a fornire prestazioni di alto livello non è così facile.

Quando il tuo codice inizia a chiamare funzioni non necessarie, inciampa su se stesso, rileva bug ed entra in loop extra, potrebbe causare inefficienze. La tua applicazione potrebbe diventare lenta, non rispondere o comportarsi in modo irregolare.

E se non si risolvono questi problemi, le prestazioni complessive dell’applicazione ne risentono.

Di conseguenza, i tuoi clienti potrebbero irritarsi o smettere di utilizzare del tutto la tua applicazione a causa delle scarse prestazioni e della bassa velocità. Non solo degrada la tua reputazione, ma ti costa anche in termini di entrate e profitti. Pertanto, il codice deve essere analizzato, rivisto e sottoposto a debug per ottenere prestazioni ottimali. E il modo rapido per farlo è utilizzare uno strumento di profilazione del software per monitorare ed eseguire il debug dei codici ed eliminare i colli di bottiglia relativi alle prestazioni.

In questo articolo imparerai a conoscere la profilazione del software e come può aiutarti. E poi, ti guiderò attraverso alcuni dei migliori strumenti di profilazione per eseguire il debug della tua applicazione e ottimizzarne le prestazioni.

Che cos’è la profilazione del software?

La profilazione del software è un’analisi dinamica del codice in cui il comportamento di un programma viene esaminato utilizzando i dati raccolti durante l’esecuzione del programma. Ha lo scopo di determinare varie sezioni del programma che è necessario ottimizzare per aumentare la velocità dell’applicazione, la reattività e ridurre il consumo di memoria e risorse.

Un profiler software misura comunemente la durata e la frequenza delle chiamate di funzione insieme alla memoria o alla complessità temporale associata a un programma. Sono disponibili anche profiler specifici, come i profiler di memoria.

La profilazione viene generalmente eseguita strumentando il codice sorgente del programma. I profiler possono utilizzare diverse tecniche di profilazione come metodi strumentali, basati su eventi, statistici o di simulazione.

Perché la profilazione del software è importante?

La profilazione del software è necessaria per determinare l’utilizzo delle risorse e il tempo di esecuzione associati a una funzione specifica. Aiuta a ottimizzare la velocità del programma e, allo stesso tempo, assicura che consumi risorse minime.

Inoltre, viene fatto per monitorare e ottimizzare l’utilizzo della CPU e il tempo di esecuzione dei comandi.

Pertanto, la scelta del giusto strumento di profilazione del software è necessaria per assicurarsi di poter eseguire il debug dei problemi relativi alle prestazioni più rapidamente per migliorarne l’efficienza e fornire una migliore esperienza all’utente finale. Molti profiler sono inoltre dotati di report dettagliati, grafici interattivi e visualizzazioni che aiutano a trovare l’esatta causa principale dei problemi, facilitando la loro risoluzione.

Quindi, ecco un elenco di alcuni dei migliori profiler software che puoi provare e dicci cosa ha funzionato meglio per te.

spia

spia è un eccellente profiler di campionamento per Python. Ciò ti consente di dare una sbirciatina a tutte le cose su cui la tua applicazione basata su Python trascorre il tempo.

Per questo, non è necessario modificare i codici o riavviare del tutto il programma. py-spy comporta un basso sovraccarico ed è sviluppato in Rust per eseguire una maggiore velocità. Non è progettato per funzionare nello stesso processo in cui viene eseguito il programma basato su Python profilato. Ciò implica che py-spy è altamente sicuro e protetto da utilizzare contro i codici di produzione basati su Python.

Lo strumento consente di registrare profili, generare grafici a fiamma per creare file SVG interattivi. Puoi visualizzare anche altre opzioni, come la modifica delle frequenze di campionamento, le estensioni C native per la profilazione, i sottoprocessi, gli ID dei thread e altro ancora. Puoi ottenere una visualizzazione live delle funzioni che si verificano nei tuoi programmi usando il comando ‘top’ e visualizzare lo stack di chiamate attuale usando il comando ‘dump’ per ogni thread python.

Supporta tutte le versioni dell’interprete CPython, come 2.3 – 2.7 e 3.3 – 3.8. Puoi installare py-spy da PyPI o GitHub.

Piroscopio

Il software di profilazione continua open source di Piroscopio ti aiuta a eseguire il debug di tutti i problemi di prestazioni all’interno della tua applicazione in pochi minuti.

Puoi avviare il server seguito dall’agente indipendentemente da ciò che usi, Docker, Linux o stai cercando documenti Ruby o Go, Pyroscope ti copre. Anche se miri a dieci secondi o dieci mesi di dati di profilazione del software, il loro motore di archiviazione progettato su misura esegue query veloci.

Non è necessario preoccuparsi dell’overhead o delle prestazioni dell’applicazione poiché utilizzano la tecnologia di profilazione del campionamento che non influisce sulle prestazioni. Pyroscope archivia i tuoi dati di profilazione in modo efficiente; quindi, è conveniente per te anche se desideri archiviare diversi dati di profilazione da varie applicazioni per anni.

Funziona su macOS, Linux e Docker e supporta programmi scritti in Python, Go e Ruby.

Bubbleprof

Bubbleprof di Clinic.js fornisce un modo nuovo e unico di profilare il tuo software scritto in Node.js. Utilizza un’interfaccia utente “bolla” che aiuta tutti, dagli esperti ai principianti, a determinare il tempo asincrono trascorso nella tua app.

Visualizza il funzionamento dei tuoi processi Node.js osservando le sue operazioni asincrone, raggruppandole, calcolando i ritardi e mappandole.

Bubbleprof determina i tempi delle operazioni osservando la dimensione delle bolle all’interno di un gruppo specifico di operazioni che possono essere il tuo codice, un core del nodo o un modulo. Raggruppa anche i gruppi adiacenti per ridurre il disordine.

Per calcolare i ritardi man mano che l’operazione passa da un gruppo all’altro, Bubbleprof misura la lunghezza della freccia che collega le bolle. Inoltre, utilizza colori diversi anche nei processi di misurazione. Allo stesso tempo, le linee colorate interne rappresentano una combinazione di tipi di operazioni asincrone come causa del ritardo.

Pyinstrument

Ottimizza i tuoi codici Python con Pyinstrument.

Ti mostra perché il tuo codice Python è lento e ti aiuta a diagnosticare i problemi in modo da poter avere prestazioni incredibilmente veloci.

Per usare Pyinstrument, non devi scrivere uno script Python; basta chiamare Pyinstrument usando direttamente la riga di comando. Il tuo script verrebbe eseguito normalmente e lo strumento produrrebbe un riepilogo colorato delle aree in cui l’applicazione ha trascorso il suo tempo. Inoltre viene fornito con un’API Python che rende il processo ancora più semplice.

Hai la possibilità di profilare le richieste web anche in Flask e Django, per i quali hanno mantenuto una documentazione elaborata. Qui, tieni presente che Pyinstrument offre un profilo statistico che registra lo stack di chiamate ogni 1 ms invece di tenere traccia di ogni chiamata di funzione effettuata dal tuo programma.

È vantaggioso in quanto i profiler statistici comportano un sovraccarico inferiore rispetto ai profiler di tracciamento. Poiché registra l’intero stack, tenere traccia delle chiamate di funzioni costose diventa semplice. Oltre a questo, Pyinstrument nasconde anche (per impostazione predefinita) i frame della libreria, consentendo di concentrarsi su applicazioni o moduli responsabili dell’impatto sulle prestazioni.

Il debug dei problemi di prestazioni è reso più semplice perché Pyinstrument registra il tempo trascorso utilizzando il tempo dell’orologio da parete. Lo strumento tiene traccia di tutto il tempo del programma per leggere file, scaricare dati, comunicare con un database, ecc.

Xdebug

Per migliorare i problemi di prestazioni del tuo codice e rendere la tua esperienza di sviluppo un po’ più divertente, Xdebug viene fornito con funzionalità ad ampio raggio per la profilazione e il debug.

In realtà è un’estensione PHP che ti consente di trovare i colli di bottiglia nella tua applicazione PHP e di analizzarne le prestazioni utilizzando strumenti di visualizzazione esterni per generare grafici delle prestazioni.

Xdebug crea un output dettagliato che mostra il percorso dell’applicazione per raggiungere un errore, inclusi i parametri passati a una data funzione. Questo viene fatto per tenere traccia degli errori. Per aiutare uno sviluppatore a capire chiaramente le cose, genera informazioni codificate a colori insieme a viste strutturate.

Viene fornito anche con un debugger remoto che puoi utilizzare per connettere Xdebug con un codice in esecuzione, IDE o browser per vedere i punti di interruzione del codice ed eseguire i codici riga per riga. Un’altra caratteristica che offre è la copertura del codice che mostra quanto è stato eseguito il codice del tuo programma e ti aiuta anche con i test unitari.

SPX

Estensione del profilo semplice (SPX) è un’estensione di profilazione progettata per PHP. Ha alcune proprietà uniche, che lo distinguono dalle altre estensioni di profilazione. È completamente GRATUITO da usare e limitato solo alla tua infrastruttura, il che significa che non c’è rischio di fughe di dati.

La semplicità di SPX lo rende molto facile da usare: tutto ciò di cui hai bisogno è impostare una riga di comando o una variabile di ambiente per profilare uno script. Oppure puoi anche attivare il pulsante di opzione su una pagina Web per profilare lo script. Di conseguenza, non è necessario strumentare manualmente il codice.

Supporta anche uno script da riga di comando in esecuzione: Ctrl-C. Oltre a ciò, questo processo elimina anche la necessità di utilizzare un programma di avvio della riga di comando o un’estensione del browser dedicata. SPX supporta più metriche di circa 22, incluse varie metriche di tempo e memoria, oggetti, file in uso, I/O, ecc.

Può raccogliere dati senza uscire dal contesto. La sua interfaccia utente Web consente di configurare/abilitare la profilazione per la sessione del browser attualmente in uso ed elenca tutti i dettagli e i report degli script profilati. L’interfaccia utente web ti consente di selezionare un rapporto specifico per un’analisi più approfondita e presenta alcune visualizzazioni interattive come Flamegraph, profilo piatto e sequenza temporale che possono essere ridimensionate per eseguire milioni di chiamate.

Prefisso

Prefisso di Stackify è un code profiler leggero e facile da installare che molti sviluppatori adorano. Ti aiuta a eliminare i colli di bottiglia nelle prestazioni dell’applicazione per ottimizzarla e migliorare l’esperienza dell’utente.

Le superiori funzionalità di tracciamento e profilazione di Prefix ti consentono di trovare rapidamente eccezioni nascoste, query SQL lente e altro ancora. Fornisce ai tuoi sviluppatori la vera potenza di APM (monitoraggio delle prestazioni delle applicazioni). Per questo, Prefix convalida le prestazioni del codice nel modo in cui è scritto e ti consente di eseguire il push di codici con prestazioni migliori da testare.

In questo modo, riceve meno ticket di supporto dal lato della produzione e aiuta i responsabili dello sviluppo a raggiungere gli obiettivi prima. Scopri tutte le query con prestazioni insufficienti, i colli di bottiglia sconosciuti e le query generate da ORM.

Puoi anche tenere traccia di ogni parametro di chiamata SQL, scaricare i tempi e visualizzare i record interessati. Il prefisso semplifica anche l’individuazione di modelli N+1. Dimentica di ordinare tutti quei registri disordinati; riunirli per individuare facilmente i problemi.

Il prefisso ti consente di trovare direttamente il contesto di un registro sospetto all’interno di una richiesta di query e passare da un registro a una traccia per il debug senza sforzo. Il prefisso fa luce sulle dipendenze con scarso rendimento, utile per trovare eccezioni nascoste e lavorare con codice legacy o sezioni del framework. Queste dipendenze possono essere servizi Web, servizi di terze parti, servizi cache e altri.

Prefix funziona su Windows e Mac e supporta .Net, Ruby, Java, PHP, Python e Node.js.

Scaleno

Scaleno è un profiler di GPU, CPU e memoria ad alta precisione e ad alte prestazioni per programmi basati su Python. Offre numerosi vantaggi rispetto ad altri profiler, come l’esecuzione di ordini di dimensioni più rapide e la fornitura di informazioni più approfondite.

Scalene è incredibilmente veloce e utilizza il campionamento piuttosto che la strumentazione. Non si basa nemmeno sulle funzionalità di tracciamento di Python. Oltre a questo, il suo sovraccarico è solitamente inferiore al 10-20%. Questo strumento esegue la profilazione del software a livello di riga e punta a quelle righe di codice responsabili del tempo di esecuzione del programma.

Questi dettagli sono più preziosi di quelli della profilazione a livello di funzione. Scalene separa il tempo trascorso esclusivamente in Python da quello del codice nativo che include le librerie. Poiché la maggior parte dei programmatori Python non ottimizzerà le prestazioni del codice nativo, gli sviluppatori possono concentrare i loro sforzi sull’ottimizzazione dei codici che puoi effettivamente migliorare.

Evidenzia gli hotspot in rosso che ti consentono di individuare più facilmente l’allocazione di tempo/memoria della CPU e di separare facilmente il tempo di sistema per trovare problemi di I/O. Scalene può segnalare il tempo della GPU, profilare l’utilizzo della memoria e tenere traccia dell’utilizzo della CPU. Scalene può anche identificare possibili perdite di memoria, volume di copia dei profili e generare profili ridotti per le righe di codice che consumano più dell’1% della CPU.

VisualVM

Lo strumento all-in-one per la risoluzione dei problemi di Java, VisualVM, è progettato per essere utilizzato sia per la fase di produzione che per quella di sviluppo. È un software visivo che integra funzionalità di profilazione leggere e strumenti JDK da riga di comando.

VisualVM monitora le applicazioni eseguite su Java 1.4+ e ne risolve i problemi utilizzando diverse tecnologie come JMX, jvmstat, Attach API e Serviceability Agent. Questo strumento si adatta perfettamente alle diverse esigenze di ingegneri della qualità, amministratori di sistema e utenti finali.

Rileva automaticamente le applicazioni basate su Java in esecuzione in remoto e in locale e le elenca. Lo strumento consente inoltre di definire manualmente i programmi utilizzando la connessione JMX. Per ogni processo, mostra i tipici dati di runtime come PID, argomenti passati, home JDK, classe principale, flag JVM, versione JVM e proprietà di sistema e argomento.

VisualVM monitora l’utilizzo della CPU, l’heap e il metaspace o la memoria di generazione permanente, i thread in esecuzione e le classi caricate in un’applicazione. Visualizza tutti i thread in esecuzione in una sequenza temporale con tempi di sospensione, esecuzione, parcheggio, monitoraggio e attesa aggregati.

Sia la strumentazione che i profiler di campionamento possono essere eseguiti utilizzando VisualVM per la gestione della memoria e le prestazioni dell’applicazione. Visualizza i dump dei thread per fornire informazioni rapide sui processi. Inoltre, visualizza e crea istantanee .hprof su richiesta per aiutarti a scoprire le inefficienze nell’utilizzo dell’heap ea eseguire il debug delle perdite di memoria.

Inoltre, VisualVM può leggere i dati di base su un processo basato su Java in crash insieme al suo ambiente. Puoi analizzare le tue app offline; può salvare l’ambiente di runtime dell’app e la configurazione con dump di heap, dump di thread e istantanee di profilazione che è possibile elaborare offline in una fase successiva.

Funziona su Windows, Linux e Unix.

Profilo orbitale

Visualizza la tua applicazione C/C++ e trova rapidamente i problemi di prestazioni utilizzando Profilo orbitale. Si tratta di uno strumento di debug e di un profiler autonomo che mira ad aiutare gli sviluppatori a visualizzare e comprendere il flusso di esecuzione dell’app complessa.

Fornisce una visione nitida di tutto ciò che accade all’interno dell’app in modo da poter eliminare rapidamente i colli di bottiglia delle prestazioni e ripristinare le prestazioni elevate dell’applicazione.

Orbit Profiler può funzionare in modo efficiente su qualsiasi app C o C++, a condizione che possa accedere al file PDB. Successivamente, inizierà la profilazione una volta completato il download del suo programma. Lo strumento passa al processo di destinazione, si aggancia alle funzioni selezionate ed esegue la profilazione.

Può persino funzionare sulle tue build finali o di spedizione ottimizzate. Oltre alla strumentazione dinamica, Orbit Profiler offre anche capacità di campionamento “always on”, che è veloce, sempre disponibile e affidabile.

Funziona su Windows e Linux.

Uber JVM Profiler

Dotato di funzionalità di profilazione avanzate, Uber JVM Profiler è un’altra buona opzione per le tue applicazioni basate su Java.

Offre un agente Java che raccoglie diverse tracce di stack e metriche per i processi JVM Spark/Hadoop in modo distribuito, ad esempio metriche di memoria/CPU/IO.

Lo strumento può tracciare argomenti e metodi java sui codici utente senza modificarli. Puoi anche usarlo per tracciare la latenza delle chiamate dei nodi dei nomi HDFS per ogni app Spark e trovare i problemi. Può persino tracciare i percorsi dei file HDFS dell’app Spark per scoprire i file più attivi ed eseguire ulteriori ottimizzazioni.

Uber JVM Profiler è stato originariamente creato per profilare le app Spark che in genere includono molte macchine o processi per un’applicazione. Pertanto, le persone possono correlare facilmente le metriche per queste macchine o processi.

Tuttavia, lo strumento funziona come un tipico agente Java e puoi utilizzarlo per qualsiasi processo JVM. Le sue caratteristiche includono:

  • Debug dell’utilizzo della memoria degli esecutori dell’app Spark, ad esempio memoria heap java, memoria nativa, memoria non heap, pool di buffer e pool di memoria
  • Debug dell’utilizzo della CPU e del tempo di Garbage Collection
  • Debug dei metodi della classe Java per la loro frequenza e ora o il profilo della durata
  • Argument Profiling (debug e traccia della chiamata al metodo della classe Java e del relativo valore dell’argomento)
  • Stacktrack Profiling e generazione di Flamegraph per il tempo della CPU
  • Debug delle metriche I/O e delle metriche dei thread JVM

Tracy

Tracy è uno strumento utile per aiutare gli sviluppatori a eseguire facilmente il debug dei programmi PHP. Ha un design intuitivo e funzionalità avanzate come il supporto CLI, il debug delle chiamate AJAX e altro ancora.

Può trovare e correggere rapidamente gli errori, scaricare variabili, registrare errori, visualizzare il consumo di memoria e determinare il tempo di esecuzione di query o script. L’utilizzo della codifica a colori e l’evidenziazione dei problemi in rosso con spiegazioni chiare consente di visualizzare facilmente le eccezioni e gli errori e di comprenderli.

Tracy viene fornito con funzionalità di registrazione e rilevamento automatico dell’ambiente. Memorizza i dati nei file di registro e visualizza i messaggi di errore del server a un visitatore durante i tempi di inattività. Tracy può anche integrarsi con Drupal 7, OpenCart, WordPress e altro.

vprof

vprof è un profiler visivo per applicazioni Python. Fornisce visualizzazioni ricche e interattive per le diverse caratteristiche del tuo programma Python, come l’utilizzo della memoria e il tempo di esecuzione.

È disponibile con licenza BSD e supporta Python 3.4 e versioni successive.

Conclusione

Le prestazioni delle applicazioni sono un fattore cruciale per soddisfare le aspettative degli utenti finali. E se si verificano problemi di prestazioni, devi essere pronto a diagnosticare il problema prima di influire sull’esperienza dell’utente finale.

Quindi, continua a ottimizzare le tue applicazioni e risolvi immediatamente i problemi per continuare a fornire prestazioni delle applicazioni super veloci agli utenti utilizzando gli strumenti che ho menzionato in questo articolo.

Ecco una rapida tabella di confronto che mostra i profiler di cui sopra e per cosa viene utilizzato principalmente.

Nome
Le lingue
spia
Pitone
Piroscopio
Python, Ruby, vai
Bubbleprof
Node.js
Pyinstrument
Pitone
Xdebug
PHP
SPX
PHP
Prefisso
Python, .NET, Java, Node.js, Ruby, PHP
Scaleno
Pitone
VisualVM
Giava
Profilo orbitale
C, C++
Uber JVM Profiler
Giava
Tracy
PHP
vprof
Pitone