使用 VisualVM 監視記憶體問題
將 VisualVM 連線至您的 ThingWorx 應用程式後,您可擷取顯示記憶體、CPU 及執行緒在您應用程式中使用情況的即時資料。VisualVM 可用來識別常見記憶體問題,並可更深入地找出該行為的根本原因。
如果您的 ThingWorx 應用程式狀態良好,VisualVM 會顯示穩定的一段時間的記憶體及 CPU 使用量。已使用記憶體的圖表會顯示常態峰值系列。這是因為 JVM 在執行清理前使用了可用的記憶體。GC 活動是總 CPU 使用量中可以忽略不計的百分比 (小於 5%)。
當系統需要更多資源時,已使用的記憶體量會長時間保持升高。GC 活動會連續或有時耗用極高百分比的總 CPU 使用量。
記憶體耗盡的圖形指示與其他工具的記憶體指標類似,例如 PSM 或 GC 記錄檔。您在使用 VisualVM 時,不會取得 JVM 層級的特定的指標。它只提供問題的視覺指示。如需找出問題的根本原因,您應該詳細分析問題。
當在 VisualVM 中看到記憶體問題時,請衡量哪些執行緒使用的記憶體最多。請在 Sample > Memory > Per thread allocations 選項中進行檢查。
* 
生產環境的取樣資料還有其他效能影響,可能會導致原本緩慢的應用程式變成完全沒有回應。在生產環境中,請使用取樣器作為取得診斷資料的最後一種替代方法。
若在 VisualVM 中啟用取樣器選項,您可以檢查 ThingWorx 應用程式中的哪些執行緒使用了大多數記憶體。如需查看這些執行緒的執行情況,請停止取樣器、從 Threads 標籤收集執行緒傾印,然後在結果中搜尋排在最前面的執行緒的名稱。例如,在上圖中,OOM_QueryStream 執行緒執行 QueryStreamEntriesWithData 查詢,已知這會觸發 ThingWorx 應用程式中的記憶體問題,具體取決於呼叫此服務的方式。
發生問題時,您可以收集應用程式的快照。快照會捕捉所有圖形及執行緒傾印。您可將此資料提供給 PTC 支援部門,以對問題進行其他分析。收集快照並不會影響應用程式的效能。
VisualVM 也可讓您手動執行 GC 操作,及收集堆集傾印。除非 PTC 支援部門建議,否則不應執行這些操作。
建議 - 在效能較慢的情況下,建議在 VisualVM 中檢查記憶體圖形,並對記憶體進行取樣,以識別出使用量較高的期間。