2017-09-14 120 views
2

我使用播放框架,它停止响应2-3天后,当我重新启动服务器,然后一切工作正常。播放框架停止响应2-3天后

请让我知道我做错了什么。 感谢

堆栈跟踪:

Caused by: io.netty.channel.ChannelException: Failed to open a socket. 
     at io.netty.channel.socket.nio.NioSocketChannel.newSocket(NioSocketChannel.java:62) 
     at io.netty.channel.socket.nio.NioSocketChannel.<init>(NioSocketChannel.java:72) 
     at sun.reflect.GeneratedConstructorAccessor42.newInstance(Unknown Source) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
     at java.lang.Class.newInstance(Class.java:442) 
     at io.netty.bootstrap.AbstractBootstrap$BootstrapChannelFactory.newChannel(AbstractBootstrap.java:454) 
     ... 64 common frames omitted 
Caused by: java.net.SocketException: Too many open files 
     at sun.nio.ch.Net.socket0(Native Method) 
     at sun.nio.ch.Net.socket(Net.java:411) 
     at sun.nio.ch.Net.socket(Net.java:404) 
     at sun.nio.ch.SocketChannelImpl.<init>(SocketChannelImpl.java:105) 
     at sun.nio.ch.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java:60) 
     at io.netty.channel.socket.nio.NioSocketChannel.newSocket(NioSocketChannel.java:60) 
     ... 70 common frames omitted 

回答

3

看起来你打的ulimit您的用户。这可能是部分或全部的功能如下:

  • 具有默认ulimit(可能是256或1024视操作系统而定)
  • 使用您的Play应用
  • 量/类型的活动您的用户

您可以识别哪些打开的文件句柄通过您的Play应用程序:

  • 在* nix操作系统上运行lsof -p PID
  • 在Windows上运行
  • 类似的Filemon(Sysinternals公司)

你可能会看到您的播放应用程序的类路径中的一切加上您的应用程序中打开例如任何文件日志文件,配置文件。另外,如果您正在* nix OS上运行,则打开的套接字也将使用文件句柄,因此您可能会看到与数据库连接池相关的打开的文件句柄,或者您的Play应用程序通过套接字进行通信的任何事情。

一旦你了解你的应用程序在做什么w.r.t打开文件句柄,你可以考虑下一步该做什么。可能是以下之一:

  • 更改您的应用程序,它打开较少的文件句柄(如果在* nix,使用较少的套接字连接)
  • 更改您的应用程序,使得它关闭打开的文件结束时处理与他们
  • 通过调用​​来增加当前shell的限制,增加用户允许的打开文件数。您选择的号码不能超过主机上配置的硬限制。您也可以永久更改ulimit,更多详情here
+0

感谢您的建议,终于找到了主要原因,我正在为每个Web服务请求创建多个WSClient对象。 –