我正在使用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发布于 2017-09-14 20:18:59
看起来您正在为您的用户命中ulimit。这可能是以下部分或全部的函数:
ulimit (可能为256或1024,具体取决于操作系统)您可以通过以下方式确定哪个打开的文件处理您的播放应用程序:
lsof -p PID 上运行类似于Filemon (来自sysinternals)的东西
你可能会看到Play应用程序的类路径上的所有内容,以及应用程序打开的任何文件,例如日志文件、配置文件。此外,如果您在*nix OS上运行,则打开的套接字也将消耗文件句柄,因此您可能会看到与数据库连接池相关的打开的文件句柄,或者您的Play应用程序通过套接字与之通信的任何内容。
一旦你了解了你的应用程序正在做什么,w.r.t打开文件句柄,你就可以考虑下一步要做什么了。可能是以下几种之一:
shell更改您的应用程序,使其打开较少的文件句柄(如果在*nix上,则使用较少的套接字connections)
ulimit -n <some number>来增加当前https://stackoverflow.com/questions/46217886
复制相似问题