我有一个播放框架1.2.4网站,处理http和https的请求。
Play监听80和443端口,没有安装反向代理。
一段时间后,站点停止响应,并在日志中显示大量"java.io.IOException: Too some files“。
显然,播放有时会使https连接处于CLOSE_WAIT状态。这些连接如下所示:
java 24151 root 201u IPv6 915797 0t0 TCP Ubuntu-1004-lucid-64-minimal:https->xdsl.******.net:55055 (CLOSE_WAIT)下面是对alive (工作了几个小时)和dead (有16k打开文件)的lsof转储的分析:
$ 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。
可能造成麻烦的原因是什么?会不会是play框架中的一个bug?
发布于 2012-05-04 18:12:10
根据您所描述的,我同意这确实是一个运行中的bug。这可能是Netty的问题,但由于Play与Netty集成在一起,我认为这种限制与您的目的无关。我建议在灯塔上开一张罚单,并可能联系Nicolas Leroux,他负责该应用程序的https部分。
然而,Play开发者将是第一个说Play不打算成为http和https容器的人。https握手最好由前端代理执行,例如Apache。网上和实战文档中有很多关于如何做到这一点的例子。
https://stackoverflow.com/questions/10446283
复制相似问题