Java 如何调试在调试模式下而不是在生产环境下工作的Play framework程序?

Java 如何调试在调试模式下而不是在生产环境下工作的Play framework程序?,java,scala,playframework-2.0,Java,Scala,Playframework 2.0,在调试中运行正常但在生产中未运行的应用程序出现问题 错误为java.util.concurrent.TimeoutException:尝试从http链接下载后,在1000之后未收到响应。将ws.timeout设置得更高,它就可以工作,但只能在debug中工作,而不能在prod中工作。关于如何调试生产模式中发生的事情,有什么想法吗?我决定将此答案放在不同的情况下,因为我认为将来会有更多的情况可以添加,如果有人遇到相同的问题,可以将其用作检查列表 是你的游戏!在前端web服务器(如PROD中的Ngi

在调试中运行正常但在生产中未运行的应用程序出现问题


错误为java.util.concurrent.TimeoutException:尝试从http链接下载后,在1000之后未收到响应。将ws.timeout设置得更高,它就可以工作,但只能在debug中工作,而不能在prod中工作。关于如何调试生产模式中发生的事情,有什么想法吗?

我决定将此答案放在不同的情况下,因为我认为将来会有更多的情况可以添加,如果有人遇到相同的问题,可以将其用作检查列表

是你的游戏!在前端web服务器(如PROD中的Nginx/Apache)后面运行的应用程序?

这可能是一种非常常见的情况,因为前端web服务器在Play未完成一定数量的请求后停止接受连接!在开发/调试模式下,您可能无法使用。拥有一个前端web服务器

您的产品配置与开发人员配置相同吗?

交叉检查PROD和DEV的配置,特别是线程池配置(如果您有任何并行度因子、并行度最大值等)、内存(-Xmx)、GC设置、Java环境等

你的游戏基准测试了吗!应用程序?

如果你还没有做到这一点,基准你的发挥!应用程序在开发模式和产品模式下使用HTTP基准测试工具,如wrk(以及稍后的Gatling)。一旦你得到数字,你可以看看你是否想调整你的发挥!通过调整操作系统参数或增加超时来接收更多连接的应用程序(FWIW,在不进行基准测试的情况下增加超时是个坏主意)


虽然升级到Play 2.2可能无法解决调试模式与Prod模式之间的谜团,但值得一看,因为我经历了总体性能的提高。

一般的方法是使用日志记录。