Playframework 如何调整play framework应用程序的可扩展性?

Playframework 如何调整play framework应用程序的可扩展性?,playframework,scalability,playframework-2.1,Playframework,Scalability,Playframework 2.1,我正在使用Play framework 2.1开发我的应用程序。它是一个非常易于使用的框架。我能够快速开发我的应用程序。但我也遇到了一些可伸缩性问题。看来剧本2.1的运行速度并不像宣称的那样快。也许是因为我不知道如何调整演出 我的问题如下:我有一个API来登录用户的电子邮件 我使用ApacheBenchmark(ab)来使用性能。一个请求大约需要230毫秒。当有5个并发请求时,响应时间仍然足够快,大约280ms Concurrency Level: 5 Time taken for t

我正在使用Play framework 2.1开发我的应用程序。它是一个非常易于使用的框架。我能够快速开发我的应用程序。但我也遇到了一些可伸缩性问题。看来剧本2.1的运行速度并不像宣称的那样快。也许是因为我不知道如何调整演出

我的问题如下:我有一个API来登录用户的电子邮件

我使用ApacheBenchmark(ab)来使用性能。一个请求大约需要230毫秒。当有5个并发请求时,响应时间仍然足够快,大约280ms

Concurrency Level:      5
Time taken for tests:   0.306 seconds
Complete requests:      5
Failed requests:        0
Write errors:           0
Total transferred:      3495 bytes
Total POSTed:           1065
HTML transferred:       3135 bytes
Requests per second:    16.34 [#/sec] (mean)
Time per request:       306.009 [ms] (mean)
Time per request:       61.202 [ms] (mean, across all concurrent requests)
Transfer rate:          11.15 [Kbytes/sec] received
                        3.40 kb/s sent
                        14.55 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    1   0.1      1       1
Processing:   280  290  13.8    292     305
Waiting:      278  288  13.7    291     304
Total:        280  291  13.9    293     306
然而,当我使用100个并发请求时,我得到了非常糟糕的结果

Concurrency Level:      100
Time taken for tests:   4.243 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      69900 bytes
Total POSTed:           21300
HTML transferred:       62700 bytes
Requests per second:    23.57 [#/sec] (mean)
Time per request:       4243.058 [ms] (mean)
Time per request:       42.431 [ms] (mean, across all concurrent requests)
Transfer rate:          16.09 [Kbytes/sec] received
                        4.90 kb/s sent
                        20.99 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1   62  31.5     83      89
Processing:   996 3744 544.7   3902    4146
Waiting:      995 3727 542.0   3894    4146
Total:       1084 3806 542.6   3968    4204
我的服务器:英特尔i7,8核,2.8GHz,8GB内存。我使用了播放框架的默认设置。有人知道如何调整play framework的性能吗

我认为这与线程池大小有关。该文档称play的默认线程池大小为#cores。在这种情况下,处理所有100个请求的预期时间为:

230ms * (100 / 8) = 2875ms
那么,我应该增加默认线程池的大小吗?但是文档说,当池大小等于#个内核时,我应该获得最佳性能

另外,netty(play的web服务器)的线程池大小会影响性能吗?我没有找到有关其默认值的任何信息。有人知道它是如何配置的吗


谢谢大家!

Play的默认线程配置是为使用异步API的应用程序设计的

如果进行大量阻塞调用(通常为“标准”JDBC数据库调用),则需要调整默认线程池,或在另一个专门配置的线程池中执行DB调用


为了理解所有这些机制,我建议您阅读Play框架文档的一节。它包含关于这个主题的非常有用的信息。

-xmx3200m例如使用32gb的堆内存运行JVM


-Xmx256m是默认的调试模式,因此您可以更改它以匹配您希望它在服务器的RAM内存空间中扩展的程度。根据您机器的I/O速率,垃圾收集周期可能看起来像是暂停,如果有很多东西需要清理,但通常是~20ms,并且不明显,这取决于应用程序的用途。

您的问题似乎是针对可扩展性而不是性能。关于性能,IMHO 230ms/req也没有那么快,所以我还要检查一下原因。您是否知道什么占用了大部分时间,例如后端调用、特定于应用程序的计算或模板呈现?请通过运行
播放开始
确保您在产品模式下对播放进行基准测试。开发模式有大量的自动重新加载开销。