应用程序在调试中运行良好但在生产中运行不正常时出现问题。
错误是java.util.concurrent.TimeoutException:尝试从http链接下载后,在1000之后没有收到响应。将 ws.timeout 设置得更高并且它可以工作,但仅限于调试而不是生产。关于如何调试生产模式中发生的情况有什么想法吗?
最佳答案
我决定将这个答案作为各种案例,因为我认为将来可以添加更多案例,并且如果有人遇到同样的问题,可以将其用作检查表。
是你的游戏!应用程序在 PROD 中的前端 Web 服务器(例如 Nginx/Apache)后面运行?
这可能是一种非常常见的情况,因为前端 Web 服务器在 Play! 未完成一定数量的请求后停止接受连接。在 DEV/DEBUG 模式下您可能不使用。有一个前端网络服务器。
您的 PROD 配置与 DEV 配置相同吗?
交叉检查您的 PROD 和 DEV 配置,尤其是。线程池配置(如果有任何并行度因子、并行度最大等)、内存(-Xmx)、GC 设置、Java 环境等。
您是否对 Play! 进行了基准测试?应用程序?
如果您还没有这样做,请对您的 Play! 进行基准测试!使用 wrk(以及后来的 Gadling)等 HTTP 基准测试工具在开发模式和生产模式下运行应用程序。获得数字后,您可以查看是否要调整 Play!应用程序接收更多数量的连接,调整操作系统参数或增加超时(FWIW,在没有基准测试的情况下增加超时是一个坏主意。)。
虽然升级到 Play 2.2 可能无法解决 Debug 与 Prod 模式背后的谜团,但值得一看,因为我已经体验到了整体性能的改进。
关于java - 如何调试在 Debug模式下而不是在生产模式下工作的 Play 框架程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22158491/