Memory leaks AbstractNioSelector选择器循环中出现意外异常

Memory leaks AbstractNioSelector选择器循环中出现意外异常,memory-leaks,playframework,websocket,netty,Memory Leaks,Playframework,Websocket,Netty,我使用Scala Play Framework 2.4.6和Netty 3.10.6.Final在生产环境中运行WebSocket服务器。oraclejdk8 通常,服务器工作正常,但在高负载下,它会引发异常并开始泄漏Linux socks 2017-05-16 15:18:28,149 WARN o.j.n.c.s.n.AbstractNioSelector Unexpected exception in the selector loop. java.lang.NullPointerExc

我使用Scala Play Framework 2.4.6和Netty 3.10.6.Final在生产环境中运行WebSocket服务器。oraclejdk8

通常,服务器工作正常,但在高负载下,它会引发异常并开始泄漏Linux socks

2017-05-16 15:18:28,149 WARN  o.j.n.c.s.n.AbstractNioSelector Unexpected exception in the selector loop.
java.lang.NullPointerException: null
    at sun.nio.ch.EPollArrayWrapper.isEventsHighKilled(EPollArrayWrapper.java:174) ~[na:1.8.0_131]
    at sun.nio.ch.EPollArrayWrapper.setUpdateEvents(EPollArrayWrapper.java:190) ~[na:1.8.0_131]
    at sun.nio.ch.EPollArrayWrapper.add(EPollArrayWrapper.java:239) ~[na:1.8.0_131]
    at sun.nio.ch.EPollSelectorImpl.implRegister(EPollSelectorImpl.java:178) ~[na:1.8.0_131]
    at sun.nio.ch.SelectorImpl.register(SelectorImpl.java:132) ~[na:1.8.0_131]
    at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:212) ~[na:1.8.0_131]
    at org.jboss.netty.channel.socket.nio.NioWorker$RegisterTask.run(NioWorker.java:151) ~[io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:391) ~[io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:315) ~[io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) [io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) [io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) [io.netty.netty-3.10.4.Final.jar:na]
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) [io.netty.netty-3.10.4.Final.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
当1800个用户连接到服务器时,就会出现问题。然后内存和Linux套接字增长。调试这个确实很困难,而且我没有在Play Framework发行说明中搜索任何套接字泄漏问题


我在SO中看到了类似的问题,但我没有手动控制服务器套接字。

这看起来像是Java错误。请在openjdk问题跟踪器上打开一个问题,并包括stacktrace

  • 我填补了这个问题,Oracle回应说,这种异常可能已经在JDK9(JDK-8168500)中修复了

  • 我们可以通过减少akka的线程数量来解决这个问题


  • 这可能是JDK-8168500,固定在JDK 9中。你能说出这里的内核版本是什么吗?当这个问题最初出现时,只能通过动态更改文件描述符限制来复制它。

    我使用的是Oracle JDK,但同样的情况也发生在Open JDK上。它们是否共享相同的问题跟踪程序?uname-a:Linux api1 4.4.0-1013-aws#22 Ubuntu SMP Fri Mar 31 15:41:31 UTC 2017 x86_64 x86_64 x86_64 GNU/LinuxAnd,是的,我们在应用程序启动后授予了更高的文件描述符限制。这可能是原因吗?