【发布时间】:2012-11-15 23:31:05
【问题描述】:
我在生产中使用 playframework 2.0,我看到相应的 java 进程打开的文件数量迅速增加。我将进程的默认允许打开文件数从 1024 更改为 4096,但这只是延迟了一个问题,一段时间后打开文件的数量变得如此之大,以至于服务器速度变慢,有时甚至出现 java.net.SocketException“太许多打开的文件”出现在日志中。
我使用的是 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)
【问题讨论】:
-
你确定它来自 Play 吗?你不会在你的应用程序中生成某种文件吗?
-
我不会从文件系统生成或读取任何文件,所有资源都自动打包在应用程序 jar 中。如果我通过
lsof实用程序测试打开了哪些文件,我会看到这些文件是指向许多不同 IP 的 unix 套接字,所以我认为这些套接字已连接到用户。而且它们不对应,例如,与我的数据库的连接。
标签: playframework-2.0 netty keep-alive