Utilizzo di VisualVM per monitorare i problemi di memoria
Quando VisualVM è connesso all'applicazione ThingWorx, è possibile recuperare dati in tempo reale che mostrano l'utilizzo di memoria, CPU e thread nell'applicazione. VisualVM permette di identificare i problemi di memoria comuni e di esaminare più a fondo la causa principale del comportamento.
Quando l'applicazione 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 ai criteri di misurazione della memoria di altri strumenti, ad esempio PSM o il log di GC. Quando si utilizza VisualVM, non si ottiene un criterio specifico 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 un'applicazione 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 nell'applicazione 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 applicazioni ThingWorx, a seconda di come viene chiamato il servizio.
In caso di problemi, è possibile raccogliere un'istantanea dell'applicazione. 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 dell'applicazione.
VisualVM consente inoltre di eseguire manualmente le operazioni di 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.