JMC在macos无法运行以及hprof无法运行

问题

现在线上有个方法很慢, 做的是导出文件的操作…现在想知道到底是代码中的哪个部分太慢了?

hprof

在jdk7的时候有这个工具: https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html
可以采用如下方式进行spring boot类应用的调试:
-agentlib:hprof=cpu=times
JMC在macos无法运行以及hprof无法运行_第1张图片但是在jdk8运行失败了:

Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/invoke/LambdaForm$MH
	at com.sun.demo.jvmti.hprof.Tracker.nativeCallSite(Native Method)
	at com.sun.demo.jvmti.hprof.Tracker.CallSite(Tracker.java:99)
	at java.lang.invoke.InvokerBytecodeGenerator.emitNewArray(InvokerBytecodeGenerator.java:889)
	at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCodeBytes(InvokerBytecodeGenerator.java:688)
	at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
	at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
	at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:635)
	at java.lang.invoke.MethodHandle.(MethodHandle.java:461)
	at java.lang.invoke.BoundMethodHandle.(BoundMethodHandle.java:58)
	at java.lang.invoke.BoundMethodHandle$Species_L.(BoundMethodHandle.java:211)
	at java.lang.invoke.BoundMethodHandle$Species_L.copyWith(BoundMethodHandle.java:228)
	at java.lang.invoke.MethodHandle.asCollector(MethodHandle.java:1002)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.(MethodHandleImpl.java:460)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.(MethodHandleImpl.java:454)

搜索了下 应该是hprof在较新的jdk版本被删除了:
here

用jfr

jdk8 某些新版本无法在macos上正常运行, 显示为可以打开但是按键无反应: https://stackoverflow.com/questions/48400346/java-mission-control-from-jdk-1-8-0-161-frozen-upon-startup-on-mac-os-x
解决办法: 我用的jdk7里面的jmc是可以打开的: /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/lib/missioncontrol

使用jcmd

java应用侧要开启jfr

-XX:+UnlockCommercialFeatures -XX:+FlightRecorder

jmc侧配置:
JMC在macos无法运行以及hprof无法运行_第2张图片JMC在macos无法运行以及hprof无法运行_第3张图片

你可能感兴趣的:(学习,java)