On Thu, 12 Sep 2024 15:44:21 GMT, Volker Simonis <simo...@openjdk.org> wrote:
>> Hi there, we are seeing this issue when we run JFR on our services under >> load, we see a large spike of CPU after JFR is triggered, which cause 500 >> errors in our service. We are currently using corretto-17 in our service. >> >> Wondering this fix get back ported to JDK 17? As I can't find this change >> mentioned in [JDK >> update](https://wiki.openjdk.org/display/JDKUpdates/Archived+Releases) or in >> [jdk17u tag >> compare](https://github.com/openjdk/jdk17u/compare/jdk-17.0.9+9...jdk-17.0.13+1) >> >> Also, wondering if there is a walk around for this issue if the PR is not >> back ported to Java 17. `XX:+EnableDynamicAgentLoading` seems to only >> supported in Java 21, so that wouldn't help for now > >> Hi there, we are seeing this issue when we run JFR on our services under >> load, we see a large spike of CPU after JFR is triggered, which cause 500 >> errors in our service. We are currently using corretto-17 in our service. >> >> Wondering this fix get back ported to JDK 17? As I can't find this change >> mentioned in [JDK >> update](https://wiki.openjdk.org/display/JDKUpdates/Archived+Releases) or in >> [jdk17u tag >> compare](https://github.com/openjdk/jdk17u/compare/jdk-17.0.9+9...jdk-17.0.13+1) >> >> Also, wondering if there is a walk around for this issue if the PR is not >> back ported to Java 17. `XX:+EnableDynamicAgentLoading` seems to only >> supported in Java 21, so that wouldn't help for now > > @leomao10, I'm not sure if this change will ever be downported to older > releases like JDK 21 or even JDK 17. I personally consider it low risk, but > there have been reports of performance regressions in some cases (e.g. > [JDK-8336805](https://bugs.openjdk.org/browse/JDK-8336805)). I couldn't > reproduce them, but I can image that they will make the maintainers of LTS > releases even more cautious. > > The easiest way to workaround this issue in JDK 17 would be to set the > `can_redefine_classes`, `can_retransform_classes` or > `can_generate_breakpoint_events` JVMTI capabilities at startup or early in > the lifetime of the JVM. There are several ways how you could do this. > - trigger JFR right after startup. This will still invalidate all the JIT > compiled methods but if you do this early enough there won'T be many of them. > After you've triggered JFR for the first time, the corresponding JVMTI > capabilities will be set and all dependencies will be recorded automatically > so any subsequent JFR invocation won't suffer from a performance degradation > any more. > - attach any other JVMTI agent like for example [async > profiler](https://github.com/async-profiler/async-profiler) which requests > the corresponding JVMTI capabilities at startup. > - write your own, trivial JVMTI agent which merely requests the corresponding > JVMTI capabilities and attach it at startup with `agentpath:jvmtiAgent.so`. > The agent can be as simple as: > > /* > > g++ -fPIC -shared -I $JAVA_HOME/include/ -I $JAVA_HOME/inlude/linux -o > jvmtiAgent.so jvmtiAgent.cpp > */ > > #include <jvmti.h> > #include <stdio.h> > #include <string.h> > > extern "C" > JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM* jvm, char* options, void* > reserved) { > jvmtiEnv* jvmti = NULL; > jvmtiCapabilities capa; > jvmtiError error; > > jint result = jvm->GetEnv((void**) &jvmti, JVMTI_VERSI... That is awesome, thanks for the response and workarounds @simonis ❤️ ------------- PR Comment: https://git.openjdk.org/jdk/pull/17509#issuecomment-2352169138