是否可以使用Java为Java探查器拍摄快照?

是否可以使用Java为Java探查器拍摄快照?,java,jvm,profiler,snapshot,Java,Jvm,Profiler,Snapshot,我想定期拍摄我的运行时快照(Java探查器上使用的.snapshot文件,如YourKit、JProfiler、VisualVM等),是否可以通过调用方法或其他方法拍摄快照?使用Java,在同一个jvm上运行?我建议定期运行Java飞行记录器。 这是什么?它是一个分析工具,与您前面提到的工具类似,它可以捕获 如何使用它?是关于如何启动它的简短描述。请注意,要评测的应用程序需要这些额外的JVM参数: java -XX:+UnlockCommercialFeatures -XX:+FlightRec

我想定期拍摄我的运行时快照(Java探查器上使用的.snapshot文件,如YourKit、JProfiler、VisualVM等),是否可以通过调用方法或其他方法拍摄快照?使用Java,在同一个jvm上运行?

我建议定期运行Java飞行记录器。

这是什么?它是一个分析工具,与您前面提到的工具类似,它可以捕获

如何使用它?是关于如何启动它的简短描述。请注意,要评测的应用程序需要这些额外的JVM参数:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
最后,对于定期调度,您需要一个可以从crontab使用的命令。为此,您可以使用上一链接中的示例命令:

jcmd 5368 JFR.start duration=60s filename=myrecording.jfr

其中“5368”是已分析应用程序的PID,其余部分不言自明。

每个分析程序都有不同的定期保存快照的机制

例如,使用带有“保存快照”操作的“计时器”触发器。如果要在保存快照之前记录有限时间的数据,请添加以下触发操作序列:

  • “开始录制”(选择所需的录制类型)
  • “睡眠”(所需时间)
  • “停止录制”
  • “保存快照”(选择了“向文件名添加唯一编号”)

如果您希望以编程方式从同一JVM控制快照的录制和保存,请使用以下命令:

Controller.startCPURecording(true);
Thread.sleep(10000);
Controller.saveSnapshot(new File("snapshot.jps"));

编写一个包含jcmd、jmap等命令的shell脚本,并将此脚本添加为cron作业。您希望对什么进行快照?您可以使用
jstack
获取线程转储。您能告诉我,通过这种方式获取的快照是否也与其他探查器兼容吗?不,快照总是绑定到特定的探查器,因为所有探查器都记录不同类型的数据。HPROF堆快照是一个例外,它可以被大多数分析器读取。