本文主要是介绍JMC在macos无法运行以及hprof无法运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
现在线上有个方法很慢, 做的是导出文件的操作…现在想知道到底是代码中的哪个部分太慢了?
hprof
在jdk7的时候有这个工具: https://docs.oracle.com/javase/7/docs/technotes/samples/hprof.html
可以采用如下方式进行spring boot类应用的调试:
-agentlib:hprof=cpu=times
但是在jdk8运行失败了:
Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/invoke/LambdaForm$MHat 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.<init>(MethodHandle.java:461)at java.lang.invoke.BoundMethodHandle.<init>(BoundMethodHandle.java:58)at java.lang.invoke.BoundMethodHandle$Species_L.<init>(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.<init>(MethodHandleImpl.java:460)at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.<init>(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无法运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!