2017-09-14 34 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對象。 –