gpt4 book ai didi

java - ForkJoinPool 的健康和调整

转载 作者:行者123 更新时间:2023-12-02 09:34:16 26 4
gpt4 key购买 nike

我正在使用 ForkJoinPool 调查应用程序中的一些性能问题。我们已经与 Dynatrace 进行了合作,有迹象表明一些阻塞操作持续时间太长。我在 FJP 文档或其他地方找不到足够的信息来了解如何配置和监控我们的 ForkJoinPools。

  1. 并行性在 ForkJoinPools 上下文中意味着什么?为不同线程池(阻塞/非阻塞)选择哪些值的指南/最佳实践是什么?

  2. 如何监控和调整我的 ForkJoinPool?我们正在使用 ForkJoinPool.toString(),它提供了一些计数器,但我在 javadoc 中找不到有关如何使用此统计信息进行调整的足够信息。 getStealCount() 被描述为“....应该足够高以保持线程繁忙,但又足够低以避免跨线程的开销和争用”,这实际上并不帮助。

toString() 示例

[Running, parallelism = 48, size = 47, active = 0, running = 0, steals
= 33195, tasks = 0, submissions = 0]

最佳答案

据我所知,没有办法调整这个“框架”。配置仅限于并行性、线程工厂、异常处理和备用线程(请参阅下面的并行性。)

我写了一个critique关于 2011 年的 F/J 代码。我多次升级了批评,不再浪费时间这样做。

偷窃计数完全没有值(value)。

每个线程没有统计信息,因此, Activity 、运行、任务等无法让您了解框架内发生的情况。这些“监视器”中的大多数是在最初的 Java7 首次亮相几年后才添加的。例如,对于每个线程,了解处理的compute() 方法总数、等待总数等可以让您了解每个线程的执行情况。但是,由于框架添加/删除线程(请参见下面的并行性),这种情况永远不会发生。拥有这些监视器的总数并不能告诉您任何有用的信息。

join() 当然,仍然存在严重的阻塞问题。如果您可以使用 CountedCompleter 类,情况会更好。

并行度是指初始线程的数量。当线程阻塞达到最大值(java.util.concurrent.ForkJoinPool.common.maximumSpares(这在 Java8 中可能不可用,除非向后移植))时,框架会超过此数字。框架根据内部规则添加/删除线程(您需要自己查看代码,因为它与版本相关。)另请参阅接口(interface) ForkJoinPool.ManagedBlocker 以及支持它的代码。

关于java - ForkJoinPool 的健康和调整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59210534/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com