2012-11-15 23 views
8

我在生产中使用playframework 2.0,并且我看到相应java进程打开的文件数量迅速增加。我将一个进程的打开文件的默认允许数量从1024改为4096,但这只是延迟了一个问题,一段时间后打开文件的数量变得如此之大,以至于服务器速度变慢,有时甚至出现一个“打开太多的文件太多文件“出现在日志中。如何在playframework 2中配置保持活动超时

我使用的是Ubuntu的服务器12.04,sun jdk 1.7.0_09。

lsof命令显示几乎所有打开的文件都是为用户连接创建的套接字,因此我得出结论,playframework使用的Netty服务器保持大量打开的连接。据我所知,我应该改变Netty服务器的保持活动行为,例如,设置一个低保活超时。我如何在playframework 2.0中配置它?或者可能是其他问题?如果需要,我可以提供任何配置。

UPD:这里有点lsof -aPn -p 12251的输出。我删IPS的某些部分与***

COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
java 12251 root 324u IPv6    279502  0t0 TCP 10.127.0.***:80->***.***.65.137:51506 (ESTABLISHED) 
java 12251 root 325u IPv6    286749  0t0 TCP 10.127.0.***:80->***.***.18.121:1624 (ESTABLISHED) 
java 12251 root 327u IPv6    287220  0t0 TCP 10.127.0.***:80->***.***.126.210:49244 (ESTABLISHED) 
java 12251 root 330u IPv6    279289  0t0 TCP 10.127.0.***:80->***.***.65.155:12444 (ESTABLISHED) 
java 12251 root 331u IPv6    285609  0t0 TCP 10.127.0.***:80->***.***.33.233:2552 (ESTABLISHED) 
java 12251 root 332u IPv6    285610  0t0 TCP 10.127.0.***:80->***.***.33.233:2554 (ESTABLISHED) 
java 12251 root 333u IPv6    287236  0t0 TCP 10.127.0.***:80->***.***.90.20:16040 (ESTABLISHED) 
java 12251 root 334u IPv6    284047  0t0 TCP 10.127.0.***:80->***.***.195.2:1175 (ESTABLISHED) 
java 12251 root 335u IPv6    279357  0t0 TCP 10.127.0.***:80->***.***.65.137:51273 (ESTABLISHED) 
java 12251 root 336u IPv6    279988  0t0 TCP 10.127.0.***:80->***.***.65.137:51287 (ESTABLISHED) 
+0

你确定它来自Play吗?你不在你的应用中生成某种文件吗? –

+0

我不生成或从文件系统读取任何文件,所有资源都会自动打包在应用程序jar中。如果我通过'lsof'工具测试打开哪些文件,我会发现这些文件是针对很多不同IP的unix套接字,所以我认为这些套接字已连接到用户。例如,它们不符合我的数据库的连接。 –

回答

2

如果您在使用播放没有任何HTTP服务器,你可以manipulate the response headers发送ResultScala version)之前,否则,你需要检查前端服务器的设置。

response().setHeader(CONNECTION, "Keep-Alive"); 
response().setHeader("Keep-Alive", "timeout=3, max=10"); 
return ok(index.render()); 

请注意,这些值是样本,我不知道它们是否符合您的需求。

+0

是的,我没有使用任何其他的HTTP服务器。看来这就是我需要的一切,我会测试。 –

+0

顺便说一句,试着问一个关于谷歌组的问题,还有更多的极客,所以也许有人会识别你的问题 – biesior

+0

不幸的是,我不能做这个工作。我在本地计算机上测试了它,设置了timeout = 1,max = 1,但是连接很长时间。不管我是否添加标题,它们都是由自己关闭的。 我读过这个头文件主要用于诊断,所以它们几乎不影响服务器的行为。 此外,设置这个头文件非常困难,程序中有很多控制器,还有一些控制器不是我自己编写的,例如Assets控制器。 –

相关问题