VisualVM を使用したメモリの問題の監視
VisualVM が ThingWorx アプリケーションに接続している場合、アプリケーションにおけるメモリ、CPU、およびスレッドの使用状況を示すリアルタイムデータを取得できます。VisualVM を使用して、一般的なメモリの問題について把握し、その動作の根本原因にドリルダウンします。
ThingWorx アプリケーションが良好な状態にある場合、VisualVM で示されるメモリと CPU の使用状況は長期的には安定しています。メモリ使用量のグラフではピークが一定間隔で現れています。これは、JVM がクリーンアップを実行する前に使用可能なメモリを使用していることが原因です。GC アクティビティは CPU 合計使用量のうちのごくわずかな割合 (5 % 未満) を示しています。
システムがさらに多くのリソースを必要とする場合、メモリ使用量のレベルは長時間にわたり高い状態が維持されます。合計 CPU 使用量に対して一定の割合で CG アクティビティが発生し、場合によっては非常に高い割合になります。
メモリ消費のグラフ表示は、PSM や GC などのその他のツールのメモリ判定基準とほぼ同じです。VisualVM を使用する場合、JVM レベルでの具体的な判定基準は得られません。ここでは問題が視覚的に示されるだけです。問題の根本原因を把握するには、問題を詳しく分析する必要があります。
VisualVM でメモリに問題があることがわかった場合、どのスレッドがメモリを最も使用しているかを測定します。これは「Sample」 > 「Memory」 > 「Per thread allocations」オプションでチェックします。
* 
本番環境でのデータサンプリングはパフォーマンスへの影響が大きく、アプリケーションの速度が低下して完全に応答しなくなる可能性があります。本番環境では、サンプラを使用した診断データの取得は最後の手段です。
VisualVM でサンプラオプションを有効にした場合、ThingWorx アプリケーションでどのスレッドが最もメモリを使用しているかをチェックできます。これらのスレッドが何を行っているかを調べるには、サンプラを停止し、「Threads」タブからスレッドダンプを収集し、結果で上位のスレッド名をサーチします。たとえば、上の例では、OOM_QueryStream スレッドは、このサービスの呼び出し方法によっては ThingWorx アプリケーションでメモリの問題を引き起こすことが確認されている QueryStreamEntriesWithData 検索を実行しています。
問題がある場合、アプリケーションのスナップショットを収集できます。スナップショットには、すべてのグラフとスレッドダンプが取り込まれています。このデータを PTC サポートに提出して問題のさらなる分析を依頼できます。スナップショットを収集してもアプリケーションのパフォーマンスには影響がありません。
VisualVM では GC オペレーションを手動で実行してヒープダンプを収集することもできます。これらのオペレーションは PTC サポートから勧められた場合にのみ実行してください。
推奨事項 - パフォーマンスが低い時間がある場合、VisualVM でメモリのグラフを調べてメモリをサンプリングすることで、メモリ使用量が多い時間を特定してください。