播放框架不使用所有64核心

时间:2014-01-22 17:21:42

标签: concurrency playframework akka

如何让Play框架使用机器上的所有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个核心吗?

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

通过单个WebSocket连接发送的消息数和Actor实例总数都是可配置的。这样,我就可以加载测试Play框架公开的WebSocket端点。

但无论我做什么,我都看不到服务器利用它的所有内核。这实际上减缓了我们的表现。有关Play框架中哪些配置可以调整以确保在重负载期间使用所有64个内核的任何建议?

以下是我在Play框架加载时看到的内容(来自日志文件):

play {
  # merge of application.conf: 7,reference.conf: 8
  akka {
    # application.conf: 9
    loglevel=WARNING
    # application.conf: 8
    "event-handlers"=[
      # application.conf: 8
      "akka.event.slf4j.Slf4jEventHandler"
    ]
    # merge of application.conf: 10,reference.conf: 12
    actor {
      # application.conf: 11
      "default-dispatcher" {
        # application.conf: 13
        "fork-join-executor" {
          # application.conf: 15
          "parallelism-factor"=2
          # application.conf: 14
          "parallelism-min"=8
          # application.conf: 16
          "parallelism-max"=256
        }
        # application.conf: 12
        executor="fork-join-executor"
      }
      # reference.conf: 13
      retrieveBodyParserTimeout="1 second"
    }
  }
}

2 个答案:

答案 0 :(得分:1)

实际使用的线程数是并行因子* availableProcessors以min和max为界。根据文件:

“#如果您设置了”executor =“fork-join-executor”“,将使用此选项       fork-join-executor {         #最小线程数将基于因子的并行数量限制为         parallelism-min = 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
  }

“ - http://doc.akka.io/docs/akka/2.2.3/general/configuration.html

答案 1 :(得分:0)

你告诉Akka每个处理器可以有10个线程,但是线程总数限制在64个。

您可以降低parallelism-factor或提升parallelism-max(显然正在进行负载测试,以确定哪个实际上对您的应用效果更好)。