我正在使用Play框架,它在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
答案 0 :(得分:3)
您似乎正在为您的用户点击ulimit
。这可能是以下部分或全部的功能:
ulimit
(可能是256或1024,具体取决于操作系统)您可以通过以下方式识别打开的文件处理您的Play应用程序:
lsof -p PID
您可能会在Play应用程序中看到所有内容&#39; classpath加上应用程序打开的所有文件,例如日志文件,配置文件。此外,如果您在* nix操作系统上运行,那么打开套接字也将使用文件句柄,因此您可能会看到与数据库连接池相关的打开文件句柄,或者您的Play应用程序通过套接字与之通信的任何内容。
了解了应用程序正在执行的操作w.r.t打开文件句柄后,您可以考虑下一步该做什么。可能是以下之一:
ulimit -n <some number>
增加当前shell的限制,增加用户允许的打开文件数。您选择的号码不能超过主机上配置的硬限制。您还可以永久更改ulimit,更多详细信息here。