Play Framework无法处理超过12个并发连接

时间:2018-10-18 09:32:09

标签: java playframework playframework-2.0 akka akka-http

我有一个香草Play 2.6应用程序,不能处理超过12个并发连接。它还会影响Play 2.5。

这是一个示例控制器:

public class TestController extends Controller {

    public Result index() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return ok("");
    }

}

使用12个并发连接进行测试:

ab -n 12 -c 12 http://localhost:9000/

输出:

...
Concurrency Level:      12
Time taken for tests:   1.005 seconds
Complete requests:      12
...

因此,所有12个并发请求都在1秒内响应,这是预期的结果。

使用13个并发连接进行测试:

ab -n 13 -c 13 http://localhost:9000/

输出:

...
Concurrency Level:      13
Time taken for tests:   2.004 seconds
Complete requests:      13
...

现在13个并发连接花费了2秒。两种情况都经过多次测试并产生一致的结果。

为什么会这样?当然,Play应该能够处理12个以上的并发连接?

1 个答案:

答案 0 :(得分:2)

播放的基础使用非阻塞IO,并且不会为每个请求分配线程。因此,当您使用诸如$table->increments('id'); 之类的方法时,将阻止Play使用该线程来处理其他请求。

进行阻塞IO时,文档建议使用专用线程池。您可以在官方文档中了解更多信息以及如何处理此案件:https://www.playframework.com/documentation/2.6.x/ThreadPools#Understanding-Play-thread-pools