如何在Maven项目中添加飞行记录器的启用标志



我正要开始使用Java任务控制5.3.0

我已将-XX:+UnlockCommercialFeatures-XX:+FlightRecorder添加到我的web应用程序的jetty.template.中

然后我用mvn-jetty:run启动web应用程序。

但当我启动飞行记录器时,出现了如下弹出的问题。

'Start Flight Recording.. (Last attempt failed)' have encountered a problem.Commercial features are not enabled. In JDK7u4 and above,the JVM must be started with -XX:+UnlockCommercialFeatures -XX:+FlightRecorder .

我还尝试将下面的标志添加到pom.xml中,但它不起作用。

<jvmArgs>
    <jvmArg>-Xmx128m</jvmArg>
    <jvmArg>-Xms128m</jvmArg>
    <jvmArg>-XX:MaxPermSize=512m</jvmArg>
    <jvmArg>-XX:+UnlockCommercialFeatures</jvmArg>
    <jvmArg>-XX:+FlightRecorder</jvmArg>
    <jvmArg>-XX:StartFlightRecording=duration=160s,delay=20s,settings=profile,filename=target/recording.jfr</jvmArg>
</jvmArgs>

我应该如何在我的web应用程序上启用飞行记录器?

应该将该配置添加到Jetty的运行VM中,所以我会尝试以下操作:

mvn jetty:run -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

我无法对此进行测试,我在Tomcat上的工作最多,但我认为这可以帮助您

我用下面的方法得到了答案。

export MAVEN_OPTS="$MAVEN_OPTS -XX:+UnlockCommercialFeatures -XX:+FlightRecorder"

如果您使用来自jdk的jcmd命令,则可以通过:启用JFR

jcmd 31118 VM.unlock_commercial_features

然后使用JFR.

例如

jcmd 31118 JFR.start name=a

经过一些测试,我将添加一些可以帮助其他人的东西:

这是我用于测试的JVM(Azul Zulu):

openjdk version "1.8.0_272"
OpenJDK Runtime Environment (Zulu 8.50.0.21-CA-linux64) (build 1.8.0_272-b17)
OpenJDK 64-Bit Server VM (Zulu 8.50.0.21-CA-linux64) (build 25.272-b17, mixed mode)

我在项目顶部创建了一个文件:

.mvn/jvm.config

它只包含一条指令:

-XX:StartFlightRecording=filename=build.jfr

然后,执行您想要执行的任何mvn目标,并查找您想要的build.jfr命令。

Zulu的JVM默认启用了飞行记录,所以您只需少担心一步。

值得一提的是,在我的案例中,我的机器中安装了几个JVM,mvn命令使用JAVA_HOME变量,因此请确保它指向正确的JVM。

最新更新