播放框架1.2.4泄漏https连接

时间:2012-05-04 09:33:18

标签: playframework playframework-1.x

我有一个播放框架1.2.4网站,它处理http和https请求。

播放侦听80和443端口,没有安装反向代理。

一段时间后,网站停止响应日志中出现大量“java.io.IOException:Too many open files”。

显然,游戏有时会将https连接置于CLOSE_WAIT状态。这些连接看起来像这样:

java    24151 root  201u  IPv6             915797      0t0      TCP Ubuntu-1004-lucid-64-minimal:https->xdsl.******.net:55055 (CLOSE_WAIT)

这里分析了lsof活着(工作几小时)和死(有16k打开文件)的转储:

$ grep "CLOSE_WAIT" dead.txt | wc -l
10473
$ grep "ESTABLISHED" dead.txt | wc -l
1888
$ grep "https.*CLOSE_WAIT" dead.txt | wc -l
10473
$ grep "https.*ESTABLISHED" dead.txt | wc -l
1621

$ grep "CLOSE_WAIT" alive.txt | wc -l
7
$ grep "ESTABLISHED" alive.txt | wc -l
50
$ grep "https.*CLOSE_WAIT" alive.txt | wc -l
7
$ grep "https.*ESTABLISHED" alive.txt | wc -l
32

如您所见,约20%的请求是http,但处于CLOSE_WAIT状态的所有连接都是https。

可能导致什么问题?它可能是游戏框架中的错误吗?

1 个答案:

答案 0 :(得分:2)

根据您所描述的内容,我会同意这似乎是Play中的一个错误。它可能是Netty的一个问题,但是当Play与Netty集成时,我认为该拆除与您的目的无关。我建议在Lighthouse上提高票价,并可能联系Nicolas Leroux,后者负责申请的https部分。

但是,Play开发人员会首先说Play不是一个http和https容器。 https握手更好地由前端代理执行,例如Apache。有很多关于如何在线和Play文档中进行此操作的示例。

相关问题