播放框架2-3天后停止响应

时间:2017-09-14 11:28:14

标签: java scala playframework

我正在使用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

1 个答案:

答案 0 :(得分:3)

您似乎正在为您的用户点击ulimit。这可能是以下部分或全部的功能:

  • 您的用户具有默认ulimit(可能是256或1024,具体取决于操作系统)
  • 您的Play应用程序中的活动数量/类型

您可以通过以下方式识别打开的文件处理您的Play应用程序:

  • 在* nix OS上运行lsof -p PID
  • 在Windows上运行Filemon(来自sysinternals)

您可能会在Play应用程序中看到所有内容&#39; classpath加上应用程序打开的所有文件,例如日志文件,配置文件。此外,如果您在* nix操作系统上运行,那么打开套接字也将使用文件句柄,因此您可能会看到与数据库连接池相关的打开文件句柄,或者您的Play应用程序通过套接字与之通信的任何内容。

了解了应用程序正在执行的操作w.r.t打开文件句柄后,您可以考虑下一步该做什么。可能是以下之一:

  • 更改您的应用程序,以便打开较少的文件句柄(如果在* nix上,则使用较少的套接字连接)
  • 更改您的应用程序,以便在完成后关闭打开的文件句柄
  • 通过调用ulimit -n <some number>增加当前shell的限制,增加用户允许的打开文件数。您选择的号码不能超过主机上配置的硬限制。您还可以永久更改ulimit,更多详细信息here
相关问题