如何在Maven项目中为Flight Recorder添加启用标志?

时间:2014-08-27 04:16:54

标签: maven flags jmc jfr

我只是开始使用 Java Mission Control 5.3.0

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

然后我用 mvn jetty启动网络应用程序:运行

但是当我开始飞行记录器时,我发现弹出的问题如下所示。

'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>

如何在我的网络应用中启用Flight Recorder?

4 个答案:

答案 0 :(得分:1)

如果您使用jdk中的jcmd命令,则可以通过以下方式启用JFR:

jcmd 31118 VM.unlock_commercial_features

然后使用JFR。

e.g

jcmd 31118 JFR.start name=a

答案 1 :(得分:0)

应该将这个配置添加到正在运行的Jetty VM中,所以我试试这个:

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

我无法测试这个,我在Tomcat上工作最多,但我认为这可以帮助你

答案 2 :(得分:0)

我在下面使用了答案。

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

答案 3 :(得分:0)

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

这是我用于测试的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。