Java任务控制监听器?

Posted

技术标签:

【中文标题】Java任务控制监听器?【英文标题】:Java Mission Control Listener? 【发布时间】:2017-07-17 01:32:30 【问题描述】:

我目前有一些想要分析的 Java 代码。在阅读了一些关于它的有希望的内容后,我决定使用 Java Mission Control。但是,到目前为止,我咨询过的每个资源都告诉我首先启动我想要分析的进程,然后才在任务控制已经运行后“附加”或分析代码(例如来自 oracle 的这个视频:@ 987654321@)。

有没有办法从一开始就进行分析?谢谢

【问题讨论】:

【参考方案1】:

有一种方法可以在您开始该过程时开始分析记录。

示例:运行分析记录 10 分钟。

java -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=duration=10m,name=Test,filename=recording.jfr,settings=profile -jar target/highcpu-0.0.1.jar

更多详情请看我的文章:Using Java Flight Recorder

【讨论】:

【参考方案2】:

没有很好的记录,但有可能。 你需要使用这个 jvm 选项

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=

前两个是强制性的,而最后一个需要配置各种参数,您可以在here 找到解释。 理解每个参数的含义并不简单,但通过一些试验和错误,您可以很容易地找到一组好的选项。

作为参考,这是一个最小的功能配置:

java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository=/tmp,maxage=6h,settings=default MyApp

【讨论】:

【参考方案3】:

JDK 11:

-XX:StartFlightRecording

JDK 9、JDK 10:

-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording

JDK 8u40,

-XX:+UnlockCommercialFeatures
-XX:StartFlightRecording=name=whatever

JDK 7u4、JDK 8u20:

-XX:+UnlockCommercialFeatures 
-XX:+FlightRecorder 
-XX:StartFlightRecording=name=whatever

如果您想避免一起附加到进程,您可以指定一个文件名,即 -XX:StartFlightRecording=filename=rec.jfr,然后通过设置持续时间(即 duration=)在一段时间后转储记录60s,或者如果你只希望它在 JVM 退出时发生:

 -XX:StartFlightRecording=
 filename=rec.jfr,dumponexit=true

您可以在 JMC 中打开然后打开录制文件。在 JDK 11 中,这已被进一步简化,因此您只需指定:

 -XX:StartFlightRecording:filename=c:\recs

并且文件名会在指定目录下生成,JVM退出时会自动转储。

【讨论】:

以上是关于Java任务控制监听器?的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章55 - 任务侦听器

如何监听 Firebase 任务完成?

15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

2018-2019学年第一学期Java课设--魔塔

java中使用map时控制其所占内存

java中使用map时控制其所占内存