2012-11-15 52 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控制器。 –

相關問題