Utilizzo di VisualVM per monitorare i problemi di memoria
Quando VisualVM è connesso alla soluzione ThingWorx, è possibile recuperare dati in tempo reale che mostrano l'utilizzo di memoria, CPU e thread nella soluzione. VisualVM permette di identificare i problemi di memoria comuni e di esaminare più a fondo la causa principale del comportamento.
Quando la soluzione ThingWorx si trova in uno stato del ciclo di vita valido, VisualVM mostra un uso costante della memoria e della CPU nel tempo. Il grafico relativo all'utilizzo della memoria usata mostra serie di picchi regolari. Ciò avviene perché JVM utilizza la memoria disponibile prima di eseguire una pulizia. L'attività di GC rappresenta una percentuale trascurabile (inferiore al 5%) dell'utilizzo totale della CPU.
Quando il sistema richiede più risorse, i livelli di memoria utilizzati rimangono elevati per lunghi periodi di tempo. È presente un'attività costante, talvolta estremamente elevata, come percentuale dell'utilizzo totale della CPU.
Le indicazioni grafiche dell'esaurimento della memoria sono simili alle metriche della memoria di altri strumenti, ad esempio il log del GC. Quando si utilizza VisualVM, non si ottiene una metrica specifica a livello di JVM, viene fornita solo un'indicazione visiva del problema. Per identificare la causa principale del problema, è necessario analizzarlo in dettaglio.
Quando si verificano problemi di memoria in VisualVM, individuare i thread che utilizzano di più la memoria nell'opzione Sample > Memory > Per thread allocations.
* 
I dati di campionamento in un ambiente di produzione hanno un impatto aggiuntivo sulle prestazioni, al punto che una soluzione lenta potrebbe smettere di rispondere. Negli ambienti di produzione utilizzare il campionamento come ultima alternativa per ottenere i dati di diagnostica.
Quando si attiva l'opzione di campionamento in VisualVM, è possibile identificare i thread che utilizzano la maggior parte della memoria nella soluzione ThingWorx. Per verificare le attività di questi thread, interrompere il campionamento, raccogliere il dump dei thread dalla scheda Threads e cercare i nomi dei primi thread tra i risultati. Ad esempio, nell'immagine precedente i thread OOM_QueryStream eseguono la ricerca di QueryStreamEntriesWithData, che notoriamente generano problemi di memoria nelle soluzioni ThingWorx, a seconda di come viene chiamato il servizio.
In caso di problemi è possibile raccogliere un'istantanea della soluzione. L'istantanea acquisisce tutti i grafici e i dump dei thread. Questi dati possono essere forniti al supporto PTC per un'analisi aggiuntiva del problema. La raccolta di un'istantanea non influisce sulle prestazioni della soluzione.
VisualVM consente inoltre di eseguire manualmente le operazioni del GC e di raccogliere i dump degli heap. Queste operazioni non devono essere eseguite, a meno che non siano consigliate dal supporto PTC.
Consiglio - In caso di periodi di rallentamento delle prestazioni, esaminare i grafici della memoria in VisualVM e campionare la memoria per identificare i periodi di utilizzo elevato.
È stato utile?