![]() 上一页 |
![]() 下一页 |
缓冲区对于 JFR 效率而言十分关键,其大小决定了从磁盘缓冲区中删除数据的时间和方式。可以在评估数据的存活时间或缓冲区大小之后丢弃数据,或者在同时检查这两个条件之后丢弃数据。本主题介绍以下功能:
启动 JFR 时,可以在命令行中配置缓冲区调整大小模式。可以从以下两种模式中进行选择:
在时间界限调整大小模式下,JFR 会将数据至少保留一段时间。过期的数据会从磁盘中删除。
在空间界限调整大小模式下,JFR 会始终保持有限大小的缓冲区,因此缓冲区中事件的最长存活时间可能会不时发生变化。
有关设置缓冲区模式的详细信息,请参阅 Oracle 技术网上的 JRockit Flight Recorder Runtime User Guide。
当发生以下任何情况时,飞行记录器会从缓冲区中移走数据,或者放弃其中的数据:
使用空间界限缓冲区调整大小模式时,必需的缓冲区大小超过了当前的缓冲区大小。
使用时间界限缓冲区调整大小模式时,数据早于当前的时间窗口。
内存中的缓冲区用光了内存。
有关设置缓冲区大小的详细信息,请参阅 Oracle 技术网上的 JRockit Flight Recorder Runtime User Guide。
不同缓冲区之间不会发生信息重叠。具体数据块将只在内存或磁盘上可用,但永远不会同时可用。这样会有以下隐患:
在出现电源故障后,尚未刷新到磁盘缓冲区的数据将不可用。
JVM 崩溃会导致一些数据在核心文件中 (即内存中缓冲区),而另一些数据在磁盘缓冲区中。飞行记录器无法合并这些缓冲区 (高级客户机程序或工具或许具有此功能,但这一点不在此版本的讨论范围之内)。
插入飞行记录器的数据在提供给使用者之前,可能略有延迟 (例如,因为数据需要移动到其他缓冲区才能变得可用)。
JFR 文件中的数据可能未按时间顺序排列,因为数据是从多个线程缓冲区以数据块的形式收集的。
在一些极端情况下,Oracle JRockit 将丢弃事件顺序,以便不阻止 JVM 继续运行。此时将放弃无法快速写入磁盘的任何数据。发生这种情况时,记录文件中将包含受影响时段的相关信息。此信息也会记录到 JRockit 的日志记录工具中。