我正在使用 YourKit 分析 playframework 2.2.3 应用程序,以尝试解决一些性能问题。这不是我的应用程序,我不熟悉 play 2。该应用程序是一个使用网络套接字的多人社交游戏。它在 Amazon EC2 m3.large 上运行
我在分析器中看到的是游戏逻辑(由 Web 套接字调用开始)在 play-internal-execution-context 中的 2 个线程中的 1 个中执行。一些例程涉及 I/O,并且由于部分方法同步而发生了一些阻塞。有一个名为 play-internal-execution-context 的线程池,但任何时候只有两个线程在使用。活动不时移动到新线程,我现在可以看到正在使用的线程名称是 play-internal-execution-context-600 和 601。
我可以在播放文档中看到
Play 内部线程池 - 这是 Play 在内部使用的。此线程池中的线程不应执行任何应用程序代码,并且不应在此线程池中执行任何阻塞。它的大小可以通过在 application.conf 中设置 internal-threadpool-size 来配置,默认为可用处理器的数量。
正如我所看到的涉及应用程序代码的线程中的堆栈跟踪,这可能是开发人员的设计不正确,或者,这仅仅是因为框架的异步性质,代码实际上只是通过在这些内部线程中执行?
一切顺利
乔恩