[PATCH] JFR thread sampling issue

Milan Mimica milan.mimica at gmail.com
Mon Nov 19 12:41:58 UTC 2018


Hello

I was regularly using JFR to profile my service and thread sampling results
have been very useful. Unfortunately, when I have switched to Java 9 and
afterwards, it stopped working. The recording would catch too few samples
for the results to be useful. My service has about 500 threads, most of
them being on some blocked state.

With the release of Java 11, I have started digging into the JFR source
code and I think I have found the problem. I think
JfrThreadSampler::task_stacktrace is supposed to find at most 5 threads
that are in state _thread_in_Java, or at most 1 thread that is in
_thread_in_native, but instead it just picks next 5 (or 1) threads and then
ignores them of they are not in right state. Without the insight into code
change prior to JDK 11 I can just guess, but there are some clues that lead
me to think that's how it was supposed to work. One of the clues is that
sample_task.do_sample_thread returns a result that is otherwise unused.

I'm attaching a patch.
Tested test-jdk_jfr_sanity on fastdebug, and in my production.

I'm waiting for my Author status approval so I'll be able to create a
proper changeset. I believe I also need a ticket for this.


-- 
Milan Mimica
-------------- next part --------------
A non-text attachment was scrubbed...
Name: jfr-sampling.patch
Type: text/x-patch
Size: 2339 bytes
Desc: not available
URL: <http://mail.openjdk.java.net/pipermail/hotspot-jfr-dev/attachments/20181119/d352e304/jfr-sampling.patch>


More information about the hotspot-jfr-dev mailing list