当在“application.conf”文件中从DEV模式切换到PROD模式时会发生什么?

11

我正在使用1.2.5版本的Play框架,最近两天我在负载测试中遇到了一个很大的问题:对于每个API调用,平均需要1200-1400毫秒的时间才能与服务器通信。但是今天我只改变了文件application.conf中的一行代码,就使得平均时间急剧减少到20-50毫秒,这行代码如下:

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

最初它是这样的

  application.mode=dev 
  %prod.application.mode=prod
从这里我可以理解到从开发环境变为生产环境会产生一些变化,而我在网上发现的是,在dev模式下,默认情况下play.pool=1,而在生产模式下play.pool = 处理器数量 + 1,我的Ubuntu机器有4个处理器,因此使用5个线程。现在来看问题,如果我发现的是真实的话,当我手动将play.pool设置为5时,在application.conf中并不会给我带来更快的结果,即使我将play.pool设置为1并在生产模式下运行也不会减慢我的应用程序负载测试结果。因此,除了这个能让我的应用程序更快的play.pool之外,我需要知道在从dev模式切换到prod模式时会发生什么。因为在UAT中我遇到的问题是在prod模式下没有好的结果,它只在我的本地主机上工作,请尽快为我找到一个解决方案,先谢谢。

更新:

是的,我知道所有那些在DEV模式下应用程序重新加载和编译的东西,但是,也许并不是针对每个请求,只是在初始化程序加载时,我认为是这样,但我的问题是在我的本地主机和本地服务器上,这个prod模式很好地工作,而当我进行UAT时,在负载测试中得到了大约800ms的不良结果。即使在生产环境下,我的应用程序也很慢,我正在本地执行负载测试(jmeter安装在服务器机器上,并使用远程桌面连接进行负载测试)。因此,除了编译和重新加载之外,我需要知道在从DEV模式切换到PROD模式时在application.conf文件中进行的所有更改,例如play.pool从1个线程更改为(处理器数量+1)个线程。FYI:我的本地主机系统是4个处理器机器,本地服务器机器也是4个处理器,但UAT机器只有2个处理器,如果这是问题,我甚至尝试将池线程更改为10(play.pool = 10),在UAT上并没有什么好结果。

3个回答

3
除单线程外,在dev模式下,应用程序启动被延迟直到发送第一个请求。在prod模式下,应用程序将立即启动。这显然会影响第一个请求的加载时间。
我想在dev模式下,“不好”的性能主要是由于运行时重新加载和编译类的功能引起的。在每个请求中,会检查类是否有更改并可能重新加载。我认为这个功能非常值得增加加载时间,而且我不知道它是否可以被禁用。
您可能不应该在dev模式下运行任何性能/验收测试。 在这里有一段关于此话题的简短讨论。与其试图提高dev模式的性能,您应该只使用prod模式。

是的,我确实知道在开发模式下重新加载和编译的所有内容,但我的问题是从DEV模式切换到PROD模式的想法在我的本地主机和本地服务器上运行良好,但这个想法在美国的UAT(测试站点)上不适用。请查看我在问题中的更新。 - Wiki

1
你在急于下结论之前应该进行更多的分析。
首先,你需要了解额外的时间花费在哪里。
  • 渲染模板?
  • 挂起等待数据库连接?
  • 是否有任何线程锁定?
  • 数据库是否使用索引进行了优化?
  • 是否已测量处理器和内存使用情况?
  • 是否进行了任何昂贵的IO操作?
  • 此计算机上是否运行其他进程?

0
你是如何在生产服务器上启动Play的?
我希望你已经阅读了:http://www.playframework.com/documentation/1.2.5/production 你的问题实际上涉及到性能问题。有很多因素可能导致本地环境和生产环境之间的性能差异。除了Play之外,数据库是否在同一台服务器上运行?

是的,数据库正在同一台机器上运行。 - Wiki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接