I am investigating some performance issues in an app using ForkJoinPool. We've been at it with Dynatrace and there are indications of some blocking operations which last way too long. I cannot find enough information in FJP docs or elsewhere about how to configure and monitor our ForkJoinPools.
What does parallelism mean in the context of ForkJoinPools, and what are the guidelines/best practice for which values to chose for different thread pools (blocking/non-blocking)?
How can I monitor and tune my ForkJoinPool? We are using ForkJoinPool.toString() which gives some counters, but I cannot find enough information in the javadoc on how to use this stats for tuning. getStealCount() is described as "....should be high enough to keep threads busy, but low enough to avoid overhead and contention accross threads", which does not really help.
Example of a toString()
[Running, parallelism = 48, size = 47, active = 0, running = 0, steals
= 33195, tasks = 0, submissions = 0]