Concurrency Play framework不使用所有64核

Concurrency Play framework不使用所有64核,concurrency,playframework,akka,Concurrency,Playframework,Akka,如何使Play framework使用机器上的所有64核。无论我配置什么,我都无法让我的Play webapp使用所有64核。是否有我应该关注的特定设置?请帮忙 目前,我已配置以下各项: play { akka { event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] loglevel = WARNING actor { default-dispatcher = { fork-joi

如何使Play framework使用机器上的所有64核。无论我配置什么,我都无法让我的Play webapp使用所有64核。是否有我应该关注的特定设置?请帮忙

目前,我已配置以下各项:

play {
  akka {
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
    loglevel = WARNING
    actor {
      default-dispatcher = {
        fork-join-executor {
          parallelism-factor = 10.0
          parallelism-max = 64
        }
      }
    }
  }
}

internal-threadpool-size=64
iteratee-threadpool-size=64
当我查看机器进程时,我可以看到只有三分之一的处理器内核被使用。是否有其他设置可以使用所有64核

我们在一个播放控制器中有一个WebSocket端点,它使用WebSocket.Async调用,处于非阻塞模式。要加载测试这个WebSocket端点,我有一个简单的客户端,它使用Akka动态创建多个参与者实例。每个参与者实例都创建一个新的WebSocket连接并发送数千条消息

可配置通过单个WebSocket连接发送的消息数和参与者实例总数。这样,我就可以真正地对Play框架公开的WebSocket端点进行负载测试

但无论我做什么,我都看不到服务器使用了所有的核心。这实际上降低了我们的表现。关于Play框架中的哪种配置可以调整以确保在重载期间使用所有64核,有什么建议吗

以下是我在加载Play framework(从日志文件)时看到的内容:


您告诉Akka每个处理器可以有10个线程,但将线程总数限制为64个


您可以降低
并行度系数
或提高
并行度最大值
(显然,要进行负载测试,看看哪一个线程对您的应用程序的性能更好)。

实际使用的线程数是以最小值和最大值为边界的并行度系数*可用处理器。根据文档:

#如果已设置“executor=”fork join executor“”,则将使用此选项 fork-join执行器{ #要限制的最小线程数基于并行度的系数要限制的线程数 最小平行度=8

    # The parallelism factor is used to determine thread pool size using the
    # following formula: ceil(available processors * factor). Resulting size
    # is then bounded by the parallelism-min and parallelism-max values.
    parallelism-factor = 3.0

    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 64
  }

"-

并行度系数表示什么影响?降低它将如何利用所有64核?@user3102968例如,如果将其降低到1.0,则每个处理器将仅使用一个线程。由于您最多有64个可用线程,如果应用程序的负载需要,则您将使用所有64核。感谢pointin让我看一下文档。事实上,我在配置application.config文件之前就提到了这一点。我最初将并行度因子设置为1,并行度最大值设置为64,但我没有看到所有的64核都被使用。我只是不断添加越来越多的负载。所谓负载,我的意思是我在播放服务器上有一个WebSocket端点,我调用在每个WebSocket连接处理成千上万的请求时,我多次使用它。有没有其他办法来解释为什么我的内核没有被利用?我不知道Play是如何处理WebSocket的。希望其他人对此有一些想法。你可能应该编辑你的问题,以包括Play y的哪个版本您正在使用和测试的方式。这些信息越有可能让您得到响应。您的意思是说,当并行度因子=3.0,并行度最大值=64时,我可以使用我的所有64个内核?当我查询运行时可用的处理器时,我会看到64个。但实际使用的处理器只有三分之一。导入以下状态有什么用我的播放控制器中的nt?导入Play.api.libs.concurrent.Execution.Implicits.\?
    # The parallelism factor is used to determine thread pool size using the
    # following formula: ceil(available processors * factor). Resulting size
    # is then bounded by the parallelism-min and parallelism-max values.
    parallelism-factor = 3.0

    # Max number of threads to cap factor-based parallelism number to
    parallelism-max = 64
  }