Prestazioni della memoria
Generalmente i problemi di prestazioni si riscontrano nell'utilizzo complessivo della memoria delle soluzioni ThingWorx. Se la soluzione fa un uso eccessivo dell'heap della memoria Java e crea e scarta continuamente oggetti di memoria di grandi dimensioni, nelle metriche della memoria per il sistema vengono visualizzati indicatori che segnalano prestazioni insufficienti. La frequenza e la durata delle garbage collection Java rivestono un ruolo significativo nella velocità di risposta complessiva del sistema. In presenza di loop continui di garbage collection si verifica un sovraccarico della memoria della soluzione, con la possibilità che ThingWorx Platform smetta di rispondere completamente.
Per monitorare l'utilizzo della memoria Java e la garbage collection nel tempo, è consigliabile attivare la registrazione del GC. Strumenti quali VisualVM, visualizzano inoltre informazioni sull'utilizzo della memoria. Tuttavia, se la JVM non risponde a causa di loop completi del GC, queste soluzioni esterne potrebbero non essere in grado di recuperare i dati per mostrare i problemi di memoria.
Quando si monitora la memoria a livello di sistema operativo, non vengono fornite informazioni sull'uso della memoria allocata da parte della soluzione ThingWorx. Lo strumento di monitoraggio recupera i dati relativi alla quantità di memoria Java richiesta dal sistema operativo, ma non mostra il modo in cui Java utilizza la memoria. La maggior parte dei problemi relativi alle prestazioni è dovuta all'utilizzo della memoria interna nello spazio degli heap Java, non alle allocazioni di memoria del sistema operativo.
La memoria complessiva allocata a Java è determinata dai parametri -Xms (minimo) e -Xmx (massimo) caricati in fase di esecuzione. I parametri -Xms e -Xmx specificano la dimensione del pool di memoria iniziale e massima, se Tomcat viene configurato utilizzando il pannello di configurazione tomcat8w.
Se all'avvio non sono specificati valori minimi o massimi, il processo Java all'avvio utilizza un'euristica per preallocare queste quantità. Per default, Java tenta di allocare un quarto della RAM complessiva disponibile nel sistema operativo.
Operazioni che causano problemi di memoria
È necessario monitorare le operazioni riportate di seguito, che possono causare problemi di memoria.
Operazioni del GC complete estremamente lunghe e frequenti la cui durata supera i 45 secondi - In quanto operazioni "stop the world", i GC completi non sono auspicabili. Più a lungo JVM rimane sospesa, maggiore è il numero di problemi di memoria:
Tutti gli altri thread attivi vengono interrotti mentre la JVM tenta di rendere disponibile una maggiore quantità di memoria.
I GC completi richiedono tempo considerevole, talvolta minuti, durante i quali la soluzione potrebbe non rispondere.
GC completi che si verificano in un loop - I GC completi che si verificano in rapida successione sono detti loop di GC completi. Possono provocare i problemi riportati di seguito.
Se la JVM non è in grado di pulire la memoria aggiuntiva, il loop può continuare indefinitamente.
La soluzione ThingWorx non è disponibile per gli utenti mentre il loop continua.
Perdite di memoria - Si verificano perdite di memoria nella soluzione quando nella memoria viene mantenuto un numero crescente di oggetti. Questi oggetti non possono essere puliti, indipendentemente dal tipo di garbage collection eseguito dalla JVM.
Quando si controlla il consumo di memoria nel tempo, viene rilevato che la perdita di memoria è conseguenza di un utilizzo sempre crescente della memoria, senza alcun recupero.
Indipendentemente dai limiti superiori impostati, a lungo andare la memoria del server si esaurisce.
È stato utile?