在调试中运行正常但未投放的应用程序出现问题。
错误是java.util.concurrent.TimeoutException:尝试从http链接下载后,在1000之后没有收到响应。设置ws.timeout更高并且它可以工作,但仅限于调试而不是prod。关于如何调试生产模式中发生的事情的任何想法?
答案 0 :(得分:0)
我决定将这个答案作为各种案例,因为我认为将来会有更多案例可以添加,如果有人遇到同样的问题,可以用作检查清单。
是你的游戏!应用程序在PROD中的Nginx / Apache之类的前端Web服务器后面运行?
这可能是一种非常常见的情况,因为前端Web服务器在Play没有完成一定数量的请求后停止接受连接!在DEV / DEBUG模式中,您可能不会使用。有一个前端Web服务器。
您的PROD配置与DEV配置相同吗?
交叉检查PROD和DEV的配置,尤其是线程池配置(如果你有任何并行因素,parallelism-max等),内存(-Xmx),GC设置,Java环境等。
您是否对游戏进行了基准测试! app?
如果你还没有这样做,请以你的游戏为基准!应用程序处于开发模式和prod模式,使用像wrk(以及后来的加特林)这样的HTTP基准测试工具。获得数字后,您可以看到是否要调整您的游戏!应用程序接收更多数量的连接调整操作系统参数或增加超时(FWIW,增加超时没有基准测试是一个坏主意。)。
虽然升级到Play 2.2可能无法解决Debug vs. Prod模式背后的谜团,但由于我所经历的整体性能提升,值得一看。