当前位置: 首页 > 知识库问答 >
问题:

为什么Play framework 2.5不使用连接池中的所有连接

轩辕实
2023-03-14
akka {
  actor {
    default-dispatcher {
      executor = "thread-pool-executor"
      throughput = 1
      thread-pool-executor {
        fixed-pool-size = 109 # db conn pool (100) + number of cores (8) + housekeeping (1)
      }
    }
  }
}
public CompletionStage<Result> asyncDb() {
    CompletableFuture<Integer> future = new CompletableFuture<>().supplyAsync(() -> {
        Ebean.createSqlQuery("select sleep(3)").findUnique();
        return 0;
    });

    return future.thenApplyAsync(integer -> ok("done"));
}

我使用sbt start运行系统,并使用apache Benchmark进行测试:

ab -n 10000 -c 100 -r -k http://localhost:9000/asyncDb

问题是播放仅使用池中的7或8个连接,而其他mysql连接空闲,同时有请求,为什么?

共有1个答案

施俊远
2023-03-14

Greg Methvin在play google group中回答了我的问题:我认为问题是CompletableFuture.SupplyAsync没有使用默认的调度程序。而是使用ForkJoinPool.CommonPool()。(参见此链接)

您需要使用接受执行程序的版本

对于执行器,您实际上有两个选项:

 类似资料:
  • 问题内容: 我对Hibernate非常陌生,刚刚开始研究将其与MySQL数据库一起使用的Web应用程序。我注意到社区文档教程指出: 内置的Hibernate连接池绝不用于生产用途。它缺乏在任何体面的连接池中都能找到的若干功能。 有人可以详细说明吗?它到底缺失了什么?人们对“默认”有什么问题?在谷歌搜索时,我在这里找到了一个网站,但它并没有真正解释问题,只是您应该使用的是什么。 问题答案: 什么是连

  • 我正在尝试按照本教程实现nodejs mysql数据库。我知道 查询()是Pool.GetConnection()+Connection.Query()+Connection.Release()的快捷方式。 在本文中,数据库配置为: 这是可以用作: 但是,我真的不明白 如果使用pool会自动释放连接,为什么我们需要这样做呢?

  • 我正在用vaadin和spring开发一个Web应用程序java,比如容器和eclipse链接,比如持久化框架。现在我想在我的应用程序中使用一个连接池。我在谷歌上读了一些我还没读到的东西。这是我的应用程序配置: 我的春日文脉 我的persistence.xml 但我得到以下异常:

  • 问题内容: 与 那两个工作正常。 使用连接池背后的想法是什么?什么时候使用? 问题答案: 从redis-py docs: 在后台,redis- py使用连接池来管理与Redis服务器的连接。默认情况下,您创建的每个Redis实例将依次创建自己的连接池。通过将已创建的连接池实例传递给Redis类的connection_pool参数,可以覆盖此行为并使用现有的连接池。您可以选择执行此操作,以实现客户端

  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的