11

我正在使用 play framework 1.2.5,在过去的两天里,我在负载测试上遇到了一个非常大的问题,即对服务器的每个 API 调用平均需要大约 1200-1400 毫秒,但今天我只更改了以下一行在文件application.conf 中,将平均时间显着减少到20 - 50 ms,行如下,

  application.mode=prod
  %prod.application.mode=prod

最初就像

  application.mode=dev 
  %prod.application.mode=prod

所以从这里我可以理解从开发到生产的改变会有所作为,而我在互联网上发现的是,在开发模式下play.pool=1默认情况下,而在生产模式下play.pool = no of processor + 1,我的 ubuntu 机器是4个处理器,所以它使用5个线程。现在遇到问题,如果我发现是真的,那么当我在application.conf中手动更改 play.pool = 5 时如果我设置 play.pool=1 并在生产模式下运行也不会给我更快的结果也不会减慢我的应用程序负载测试结果,所以我需要知道当我从开发模式更改为生产模式时会发生什么,除了这个播放.pool 这使我的应用程序更快。因为我在 UAT 中遇到问题,在 prod 模式下更改也没有好的结果,它只适用于我的本地主机。请尽快为我找到解决方案,谢谢。

更新 :

是的,我确实知道所有这些东西,比如在 DEV 模式下,应用程序会重新加载和编译,但是,我认为它可能不是仅在初始程序加载时才针对每个请求,但我的问题是这种 prod 模式在我的本地主机和本地运行良好服务器,当我使用 UAT 时,平均大约 800 毫秒的负载测试结果不佳。即使我在本地执行负载测试(jmeter 安装在服务器机器中,我正在使用远程桌面连接对其进行负载测试),即使在 prod 中应用程序也很慢。因此,除了编译和重新加载之外,当我从 DEV 更改为 PROD 模式时,我需要知道 application.conf 文件中执行的所有更改,例如 play.pool 从 1 个线程更改为(处理器数量 + 1 个)线程。 仅供参考:我的本地主机系统是 4 处理器机器,本地服务器机器是 4 处理器,但 UAT 机器是 2 处理器,如果这是我什至尝试将池线程更改为 10(play.pool=10)并且没有在 UAT 取得好成绩。

4

3 回答 3

3

除了单线程之外,在dev模式下,应用程序启动会延迟到发送第一个请求。在prod模式下,应用程序将立即启动。这显然会影响第一个请求的加载时间。

我猜模式中的“糟糕”性能dev主要是由于运行时重新加载和编译类的特性造成的。在每个请求上,都会检查类是否有更改,并且可能会重新加载。我认为这个功能非常值得增加加载时间,我什至不知道是否可以停用。

您可能不应该在开发模式下运行任何性能/验收测试。这是一个关于它的简短讨论。与其尝试提​​高开发模式的性能,不如只使用 prod 模式。

于 2013-08-22T15:27:53.730 回答
1

在开始行动之前,您应该做更多的分析。
首先,您尝试了解这些额外时间都花在了哪里。

  • 渲染模板?
  • 等待数据库连接?
  • 有线程锁吗?
  • 数据库是否使用索引进行了优化?
  • 您是否测量过处理器和内存使用情况?
  • 您是否在进行任何昂贵的 IO 操作?
  • 这台机器上是否正在运行其他进程?
于 2013-08-26T10:45:04.823 回答
0

你是如何在生产服务器上启动游戏的?

我希望你已经阅读: http ://www.playframework.com/documentation/1.2.5/production

您的问题实际上是关于性能问题。可能有很多因素会导致您的本地环境和生产环境出现性能差异。除了 Play,数据库是否在同一个盒子上运行?

于 2013-08-26T14:29:41.130 回答