Playframework 如何调整play framework应用程序的可扩展性?
我正在使用Play framework 2.1开发我的应用程序。它是一个非常易于使用的框架。我能够快速开发我的应用程序。但我也遇到了一些可伸缩性问题。看来剧本2.1的运行速度并不像宣称的那样快。也许是因为我不知道如何调整演出 我的问题如下:我有一个API来登录用户的电子邮件 我使用ApacheBenchmark(ab)来使用性能。一个请求大约需要230毫秒。当有5个并发请求时,响应时间仍然足够快,大约280msPlayframework 如何调整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
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也没有那么快,所以我还要检查一下原因。您是否知道什么占用了大部分时间,例如后端调用、特定于应用程序的计算或模板呈现?请通过运行
播放开始
确保您在产品模式下对播放进行基准测试。开发模式有大量的自动重新加载开销。