Configurare Metaspace in JMeter

Immagine di copertina

In JMeter, una corretta configurazione delle opzioni della JVM può aiutare nell’esecuzione dei test e soprattutto nell’ottimizzazione delle risorse. Come? Partendo dal concetto di Metaspace!

Cos’è Metaspace

Metaspace è un’area di memoria introdotta in Java 8 per gestire i metadati delle classi, che contengono informazioni sulle classi caricate dalla Java Virtual Machine (aka JVM). A differenza dello spazio di “Generazione Permanente” (chiamato PermGen) precedente, Metaspace risiede nella memoria nativa (quindi fuori dall’heap di Java) e può ridimensionarsi dinamicamente in base alle esigenze dell’applicazione.

Come JMeter sfrutta il Metaspace

In JMeter, Metaspace viene utilizzato per memorizzare i metadati delle varie classi che vengono caricate durante l’esecuzione dei test. Questo include le classi di JMeter, eventuali plugin e script definiti dall’utente, ma anche le classi necessarie per eseguire i test.

Ad esempio, quando esegui un piano di test complesso con diversi elementi e listener, JMeter carica numerose classi in memoria, aumentando così l’uso di Metaspace.

Esempio di Configurazione

Per configurare Metaspace in JMeter, puoi impostare la configurazione desiderata sfruttando i parametri nel file jmeter.bat o jmeter.sh. Ad esempio, nel file jmeter.bat, puoi modificare l’opzione settando un valore maggiore relativamente al MaxMetaspaceSize, che di default è a 256MB:

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    # set HEAP=-Xms512m -Xmx512m -XX:MaxMetaspaceSize=256m
    set HEAP=-Xms1g -Xmx1g -XX:MaxMetaspaceSize=512m
)

Questa configurazione imposta una dimensione iniziale e una dimensione massima dell’heap di 1 GB e limita Metaspace a 512 MB. Regolare questi valori aiuta a gestire la memoria in modo più efficace durante i test di performance.

Verifica della Configurazione

Per controllare se la tua configurazione di Metaspace è stata applicata correttamente, puoi usare il seguente frammento di codice in un sampler JSR223 per registrare gli argomenti effettivi della JVM:

java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().each {
    log.info("Argomento JVM effettivo: " + "$it")
}

Attivando la visualizzazione dei log su JMeter, vedremo che la precedente configurazione è stata applicata con successo:

Log Viewer in JMeter

Comprendendo e gestendo efficacemente Metaspace, puoi ottimizzare le prestazioni di JMeter durante i test di carico evitando problemi legati alla memoria.

Monitoraggio dell’Uso di Metaspace

Per monitorare l’uso di Metaspace in modo efficace:

  1. Monitoraggio JMX: Utilizza Java Management Extensions (JMX) per tracciare l’utilizzo di Metaspace in tempo reale. Puoi accedere a metriche come l’uso attuale e l’uso massimo tramite MBeans.

    Codice di esempio per monitorare Metaspace:

    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryPoolMXBean;
    
    public class MetaspaceMonitor {
        public static void main(String[] args) throws Exception {
            MemoryPoolMXBean metaspaceBean = ManagementFactory.getMemoryPoolMXBean("java.lang:type=MemoryPool,name=Metaspace");
            while (true) {
                System.out.println("Metaspace utilizzato: " + metaspaceBean.getUsage().getUsed() / (1024 * 1024) + " MB");
                Thread.sleep(1000);
            }
        }
    }
    
  2. Strumenti: Utilizza strumenti come VisualVM o JConsole per visualizzare l’uso della memoria, incluso Metaspace. Questi strumenti forniscono informazioni su quanta memoria viene utilizzata e possono aiutare a identificare problemi potenziali.

Impatto sulle Prestazioni

Le prestazioni di JMeter possono essere significativamente influenzate dall’uso di Metaspace:

  • Consumo di Memoria: Se vengono caricate molte classi (a causa di piani di test complessi o dell’uso di plugin), il Metaspace può riempirsi rapidamente. Se supera il MaxMetaspaceSize configurato, può portare ad un errore di tipo OutOfMemoryError.
  • Garbage Collection: La JVM può attivare il GC quando tenta di allocare nuovo spazio per il Metaspace se raggiunge il suo limite, il che può introdurre latenza nell’esecuzione dei test.

🔗 Leggi anche:

Conosci meglio chi ha scritto questo articolo

Serena Sensini

Ciao! Mi chiamo Serena Sensini e sono la creatrice di @ TheRedCode.it. Ho aperto questo blog nel 2021 per raccontare il mio lavoro e il mondo dell’informatica a parole semplici, in piccole pillole e alla portata di tutte le persone.

Sono un’ingegnera informatica specializzata in ambito AI & NLP. Di giorno lavoro come CTO @ Welyk e come Innovation & Emerging Technologies Leader @ Dedalus, mentre di notte scrivo e sono autrice di 5 libri -per ora-. 🖊️

Foto di Serena Sensini

Partners

Community, aziende e persone che supportano attivamente il blog

Vuoi diventare partner?

Collaboriamo con community, aziende e strumenti del mondo tech che vogliono raggiungere la nostra community di dev ed engineer italiani. Scrivici per proporre una collaborazione.

✉️ Scrivici

Vuoi diventare tech content creator? 🖊️

Se ti va di raccontare la tua esperienza nel mondo tech, questo è il posto giusto.

Cerchiamo voci autentiche, esempi pratici e punti di vista utili per chi legge.

Scrivici a collaborazioni[at]theredcode.it con una proposta: idea, taglio del contenuto e una breve presentazione. Non vediamo l'ora di leggere la tua esperienza!

Invia la tua idea