Я пытаюсь измерить влияние агента JVM на производительность, чтобы убедиться, что он не сделает недействительными тесты, которые мы пытаемся запустить (и, возможно, обосновать выбор некоторых образцов из prod). Этот случай представляет собой набор сценариев BTrace, которые будут выполняться во время автоматического нагрузочного тестирования, но проблема может быть общей для любого агента.
Чтобы запустить тесты, я создал небольшой проект JMH и прикрепляю агент как:
java -javaagent:/home/ssube/btrace/build/btrace-agent.jar=scriptdir=/home/ssube/btrace/scripts/,port=0 -jar benchmarks.jar
Это приводит к появлению следующей ошибки каждый раз, когда JMH разветвляет JVM:
# Run progress: 0.00% complete, ETA 00:02:00
# Fork: 1 of 1
Exception in thread "main" java.lang.IllegalArgumentException: org.openjdk.jmh.runner.options.CommandLineOptions; local class incompatible: stream classdesc serialVersionUID = 8906142321598115825, local class serialVersionUID = 7529911323947566771
at org.openjdk.jmh.runner.ForkedMain.main(ForkedMain.java:72)
<binary link had failed, forked VM corrupted the stream? Use EXTRA verbose to print exception>
<forked VM failed with exit code 1>
<stdout last='10 lines'>
</stdout>
<stderr last='10 lines'>
Exception in thread "main" java.lang.IllegalArgumentException: org.openjdk.jmh.runner.options.CommandLineOptions; local class incompatible: stream classdesc serialVersionUID = 8906142321598115825, local class serialVersionUID = 7529911323947566771
at org.openjdk.jmh.runner.ForkedMain.main(ForkedMain.java:72)
</stderr>
# VM invoker: /usr/java/jdk1.8.0_11/jre/bin/java
# VM options: -javaagent:/home/ssube/btrace/build/btrace-agent.jar=scriptdir=/home/ssube/btrace/scripts/,port=0
# Warmup: 20 iterations, 1 s each
# Measurement: 20 iterations, 1 s each
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time
# Benchmark: com.stackoverflow.questions.ShaderBench.testProcessProc
Ни один из моих классов не сериализуем и не имеет serialVersionUID. Бенчмарк JMH работает без подключенного агента BTrace, а агент и скрипты работают с кодом без JMH.
(Как) вы можете подключить javaagent к набору тестов JMH и зафиксировать различия в производительности, вызванные агентом?