在Play Framework 2.0.3中使用阻止IO

时间:2013-03-13 11:15:29

标签: playframework-2.0 akka nonblocking

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

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

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

所以我试着通过把它放在application.conf里来改变默认的播放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对象直接放在文件中它会起作用吗?我这样做的时候没有任何错误,所以我认为它接受了这个?

如果是,我如何测试这是否生效?我没有看到应用程序的性能发生了巨大变化。所以我不确定我是否在这里遇到了根本性的错误。任何帮助,指示或评论将受到高度赞赏。

我们在Linux机顶盒上使用Play 2.0.3和OpenJDK 1.6,内置2个CPU,xmx为2GB。

1 个答案:

答案 0 :(得分:0)

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

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