JMH 的 DTraceAsmProfiler 在 Mac 上因“[sudo:需要密码”而失败
DTraceAsmProfiler of JMH fails with '[sudo: a password is required' on Mac
我运行使用 DTraceAsmProfiler
在 MacOS 上使用 IDEA 进行基准测试,但失败并出现此错误:
Exception in thread "main" org.openjdk.jmh.runner.ProfilersFailedException: Profilers failed to initialize, exiting.
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:228)
at org.openjdk.jmh.runner.Runner.run(Runner.java:209)
at com.tsypanov.benchmark.BenchmarkRunner.main(BenchmarkRunner.java:45)
Caused by: org.openjdk.jmh.profile.ProfilerException: [sudo: a password is required
]
at org.openjdk.jmh.profile.DTraceAsmProfiler.<init>(DTraceAsmProfiler.java:69)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openjdk.jmh.profile.ProfilerFactory.instantiate(ProfilerFactory.java:82)
at org.openjdk.jmh.profile.ProfilerFactory.getProfiler(ProfilerFactory.java:77)
at org.openjdk.jmh.profile.ProfilerFactory.getProfilerOrException(ProfilerFactory.java:37)
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:225)
... 2 more
我的代码:
public class BenchmarkRunner {
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(CRHMBenchmark.class.getSimpleName())
.warmupIterations(10)
.warmupTime(TimeValue.seconds(1))
.measurementIterations(10)
.measurementTime(TimeValue.seconds(1))
.addProfiler(DTraceAsmProfiler.class)
.forks(5)
.build();
new Runner(opt).run();
}
}
我也尝试从终端 运行 它并得到同样的错误:
% java -jar target/benchmarks.jar CRHMBenchmark -f 2 -w 1s -r 1s -prof dtraceasm
Profilers failed to initialize, exiting.
[sudo: a password is required
]
有人遇到过吗?
我终于找到了解决方案:
sudo "/Users/stsypanov/Library/Java/JavaVirtualMachines/openjdk-17.0.1/Contents/Home/bin/java" -jar target/benchmarks.jar CRHMBenchmark -f 1 -w 1s -r 1s -prof dtraceasm -jvmArgsAppend "-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly"
我运行使用 DTraceAsmProfiler
在 MacOS 上使用 IDEA 进行基准测试,但失败并出现此错误:
Exception in thread "main" org.openjdk.jmh.runner.ProfilersFailedException: Profilers failed to initialize, exiting.
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:228)
at org.openjdk.jmh.runner.Runner.run(Runner.java:209)
at com.tsypanov.benchmark.BenchmarkRunner.main(BenchmarkRunner.java:45)
Caused by: org.openjdk.jmh.profile.ProfilerException: [sudo: a password is required
]
at org.openjdk.jmh.profile.DTraceAsmProfiler.<init>(DTraceAsmProfiler.java:69)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openjdk.jmh.profile.ProfilerFactory.instantiate(ProfilerFactory.java:82)
at org.openjdk.jmh.profile.ProfilerFactory.getProfiler(ProfilerFactory.java:77)
at org.openjdk.jmh.profile.ProfilerFactory.getProfilerOrException(ProfilerFactory.java:37)
at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:225)
... 2 more
我的代码:
public class BenchmarkRunner {
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(CRHMBenchmark.class.getSimpleName())
.warmupIterations(10)
.warmupTime(TimeValue.seconds(1))
.measurementIterations(10)
.measurementTime(TimeValue.seconds(1))
.addProfiler(DTraceAsmProfiler.class)
.forks(5)
.build();
new Runner(opt).run();
}
}
我也尝试从终端 运行 它并得到同样的错误:
% java -jar target/benchmarks.jar CRHMBenchmark -f 2 -w 1s -r 1s -prof dtraceasm
Profilers failed to initialize, exiting.
[sudo: a password is required
]
有人遇到过吗?
我终于找到了解决方案:
sudo "/Users/stsypanov/Library/Java/JavaVirtualMachines/openjdk-17.0.1/Contents/Home/bin/java" -jar target/benchmarks.jar CRHMBenchmark -f 1 -w 1s -r 1s -prof dtraceasm -jvmArgsAppend "-XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly"