【问题标题】:Using blocking IO in Play Framework 2.0.3在 Play Framework 2.0.3 中使用阻塞 IO
【发布时间】:2013-03-01 07:03:41
【问题描述】:

我们正在使用一个非常频繁地查询 MySQL 的 Play 应用程序。事实上,几乎每个操作都以某种方式查询数据库。

据我了解,Play 旨在支持异步和非阻塞应用程序,并鼓励据此进行编码。但是由于 com.mysql.jdbc.Driver 是一个阻塞的 JDBC 驱动程序,我看不到使用非阻塞查询的方法。

当多个 (6-20) 用户同时使用我们的应用程序时,我们遇到了严重的性能问题。当您开始使用应用程序时,它会随着时间的推移变得缓慢。

所以我尝试通过将其放在 application.conf 中来更改默认的 play akka 配置,正如此处为“高度同步的应用程序”所建议的那样:http://www.playframework.com/documentation/2.1.0/ThreadPools

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

我的问题是:application.conf 中的大多数其他配置都是 key=value 对,我是否只是将这个 json 对象直接放在文件中,它就可以工作?我这样做时没有收到任何错误,所以我认为它接受了这个?

如果是,我如何测试它是否生效?我没有看到应用程序的性能发生巨大变化。所以我不确定我是否在这里遇到了根本性的错误。任何帮助、指针或 cmets 将不胜感激。

我们在 linux 机器上使用 Play 2.0.3 和 OpenJDK 1.6,具有 2 个 CPU 和 2GB 的 xmx。

【问题讨论】:

    标签: playframework-2.0 akka nonblocking


    【解决方案1】:

    如果您的配置文件已经有default-dispatcher 的部分,那么您只需确保它使用fork-join-executor 并增加parallelism-minparallelism-max 的值。

    您可以将log-config-on-start = on 选项添加到配置的play { akka { }} 部分,以在应用程序启动时记录完整的akka​​ 配置(然后检查default-dispatcher 是否具有parallelism-minparallelism-max 的正确值) .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 2017-09-10
      • 2012-09-03
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多