使用 VisualVM 监视内存问题
当 VisualVM 连接到您的 ThingWorx 应用程序时,您可以检索用于显示应用程序中内存、CPU 和线程使用情况的实时数据。VisualVM 可用于明确常见内存问题,并进一步挖掘此类行为的根本原因。
当您的 ThingWorx 应用程序处于良好状态时,VisualVM 会显示一段时间内稳定的内存和 CPU 使用情况。所用的内存图形会显示规则的连续峰值。这是因为 JVM 在执行清理之前会使用可用内存。GC 活动在总 CPU 使用率中所占的百分比 (少于 5%) 可忽略不计。
当系统需要更多资源时,所用的内存级别长时间内仍会提升。GC 活动在总 CPU 使用率中所占的百分比是一个常量,有时也会极高。
内存耗尽的图形指示与其他工具 (如 PSM 或 GC 日志) 的内存指标类似。使用 VisualVM 时,不会在 JVM 级别获得特定指标。它仅提供问题的直观指示。要确定问题的根本原因,应详细分析问题。
当在 VisualVM 中发现内存问题时,请测量使用内存最多的线程。通过“示例” > “内存” > “按线程分配”选项来检查此项。
* 
生产环境中的采样数据会带来额外的性能影响,并可能拖慢应用程序导致其完全无响应。在生产环境中,使用取样器作为获取诊断数据的最后一种替代方法。
在 VisualVM 中启用取样器选项时,可以检查 ThingWorx 应用程序中使用内存最多的线程。要查看这些线程正在进行的操作,请停止取样器,从“线程”选项卡中收集线程转储,然后在结果中搜索最高线程名称。例如,在上图中,OOM_QueryStream 线程执行 QueryStreamEntriesWithData 查找,众所周知,该查找会根据此服务的调用方式触发 ThingWorx 应用程序中的内存问题。
当存在问题时,您可以收集应用程序的快照。快照会捕获所有图形和线程转储。可将此数据提供给 PTC 支持网站,以便对问题做进一步的分析。收集快照不会影响应用程序的性能。
您还可通过 VisualVM 手动执行 GC 操作并收集转储。除非 PTC 支持网站建议执行,否则不应执行这些操作。
建议 - 在性能缓慢的情况下,建议检查 VisualVM 中的内存图形,并对内存进行取样以确认高使用率时段。