Utilisation de VisualVM pour surveiller les problèmes de mémoire
Lorsque VisualVM est connecté à votre application ThingWorx, vous pouvez récupérer des données en temps réel utiles pour comprendre la consommation de mémoire ainsi que l'utilisation de l'UC et des threads dans votre application. VisualVM permet d'identifier les problèmes de mémoire courants et de remonter à la cause profonde du comportement.
Lorsque votre application ThingWorx se trouve dans un état satisfaisant, VisualVM vous montre une consommation de mémoire et une utilisation de l'UC stables dans le temps. Le graphique sur la consommation de mémoire affiche une série régulière de pics. Ceci est dû au fait que la JVM mobilise la mémoire disponible avant de procéder à un nettoyage. L'activité GC représente un pourcentage négligeable (inférieur à 5 %) de l'utilisation totale de l'UC.
Lorsque le système nécessite davantage de ressources, les niveaux de mémoire utilisés restent élevés sur de longues périodes. L'activité GC est constante ou parfois extrêmement élevée en pourcentage de l'utilisation totale de l'UC.
Les indications graphiques d'un épuisement de la mémoire sont similaires aux mesures concernant la mémoire que fournissent d'autres outils tels que PSM ou le journal GC. Lorsque vous utilisez VisualVM, vous n'obtenez pas de mesure spécifique au niveau de la JVM. Vous disposez simplement d'une indication visuelle du problème. Pour identifier l'origine du problème, vous devez l'analyser dans le détail.
Lorsque vous observez des problèmes de mémoire dans VisualVM, mesurez quels sont les threads qui utilisent le plus de mémoire. Activez cette mesure dans l'option Sample > Memory > Per thread allocations.
* 
Les opérations d'échantillonnage dans un environnement de production ont un impact supplémentaire sur les performances et peuvent conduire une application lente à ne plus répondre du tout. Dans un environnement de production, n'utilisez l'échantillonneur qu'en dernier ressort pour obtenir des données de diagnostic.
La fonction d'échantillonneur dans VisualVM vous permet d'identifier les threads qui utilisent le plus de mémoire dans votre application ThingWorx. Pour analyser le comportement de ces threads, arrêtez l'échantillonneur, collectez le thread dump depuis l'onglet Threads, puis observez dans le résultat les threads du haut de la liste. Par exemple, dans la capture d'écran précédente, les threads OOM_QueryStream effectuent des requêtes QueryStreamEntriesWithData, connues pour provoquer des problèmes de mémoire dans les applications ThingWorx selon la façon dont le service est appelé.
En cas de problème, vous pouvez collecter un instantané de l'application. Un tel instantané capture tous les graphiques et les thread dumps. Ces données peuvent être communiquées au support PTC pour analyse approfondie du problème. La collecte d'un instantané n'affecte pas les performances de l'application.
VisualVM vous permet également d'exécuter des opérations de GC manuellement et de collecter des heap dumps. Ces opérations ne doivent être réalisées que sur recommandation du support PTC.
Recommandation : en cas de périodes de ralentissement des performances, il est recommandé d'inspecter les graphiques mémoire dans VisualVM et d'échantillonner la mémoire pour identifier les périodes d'utilisation intensive.