使用JDK飞行记录器跟踪Java本机内存

使用JDK飞行记录器跟踪Java本机内存

💡 原文英文,约900词,阅读约需3分钟。
📝

内容提要

本文介绍了使用JFR报告NMT数据的方法,包括直接字节缓冲区和Foreign Memory API分配堆外内存。还讨论了JFR中控制NMT的设置和在JDK Mission Control中查看NMT数据的方法。最后,介绍了使用JFR记录Resident Set Size(RSS)事件来跟踪内存消耗。

🎯

关键要点

  • 本文介绍了通过JFR报告NMT数据的方法,包括直接字节缓冲区和Foreign Memory API的使用。
  • 示例程序展示了如何分配堆外内存,并使用JFR记录NMT事件。
  • NMT事件默认每秒记录一次,程序运行时间足够长以确保不同的分配被记录。
  • NMT在JFR中通过gc设置控制,必须设置为'normal'、'detailed'、'high'或'all'以记录NMT数据。
  • 使用-XX:NativeMemoryTracking JVM选项启用NMT。
  • 在JDK Mission Control中查看NMT数据时,NMT事件显示在通用事件浏览器视图中。
  • 新Foreign Memory API的优势在于内存可以在Arena对象关闭时立即释放。
  • NMT会导致5%-10%的性能开销,不适合在生产环境中长期使用。
  • Java 21引入了'Resident Set Size' (RSS)事件,可以持续跟踪应用程序的内存消耗。
  • 通过JFR事件流,可以将RSS值实时传输给远程监控客户端,便于可视化监控。
➡️

继续阅读