我正在调查使用ForkJoinPool的应用程序中的性能问题。我们一直在使用Dynatrace,发现有一些阻塞操作持续时间过长的迹象。我无法在FJP文档或其他地方找到足够的信息来配置和监视我们的ForkJoinPools。
1.在ForkJoinPools的背景下,什么是并行性,并且对于不同的线程池(阻塞/非阻塞),选择哪些值的指南/最佳实践是什么?
2.如何监视和调整我的ForkJoinPool?我们正在使用ForkJoinPool.toString(),它提供了一些计数器,但我不能在javadoc中找到足够的信息来使用这些统计数据进行调整。getStealCount()被描述为“...应该足够高,以使线程保持繁忙,但足够低,以避免跨线程的开销和争用”,这并没有真正帮助。
toString()的示例:
1.在ForkJoinPools的背景下,什么是并行性,并且对于不同的线程池(阻塞/非阻塞),选择哪些值的指南/最佳实践是什么?
2.如何监视和调整我的ForkJoinPool?我们正在使用ForkJoinPool.toString(),它提供了一些计数器,但我不能在javadoc中找到足够的信息来使用这些统计数据进行调整。getStealCount()被描述为“...应该足够高,以使线程保持繁忙,但足够低,以避免跨线程的开销和争用”,这并没有真正帮助。
toString()的示例:
[Running, parallelism = 48, size = 47, active = 0, running = 0, steals
= 33195, tasks = 0, submissions = 0]