2017-05-18 21 views
1

Scala Play Framework 2.4.6とNetty 3.10.6.Finalを使用してWebSocketサーバを運用しています。 Oracle JDK 8.AbstractNioSelectorセレクタループで予期しない例外が発生しました

通常、サーバーは正常に動作しますが、高負荷では例外が発生し、Linuxソックスが漏れ始めます。

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のリリースノートでソケットリークの問題がGoogleにはありませんでした。

私も同様の質問を見ましたが、手動でサーバーソケットを制御しません。

答えて

1

これはJavaのバグのようです。 OpenJDKの課題追跡に問題を開いて、スタックトレースを含める..

+0

私はOracle JDKを使用していますが、Open JDKでも同じことが起こりました。彼らは同じ課題トラッカーを共有していますか? –

+0

はい同じトラッカー –

0
  1. してください、私は問題を満たし、Oracleは、このような例外がありそう既に(JDK-8168500中)JDK9に固定されていると回答しました。

  2. akkaのスレッド数を減らすことで修正できました。

0

JDK-8168500がJDK 9で修正されている可能性がありますか?この問題が最初に発生したとき、それは動的にファイル記述子の制限を変更することによってのみ再現することができました。

+0

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/Linux –

+0

また、アプリケーション開始後のファイル記述子の制限。それが原因だろうか? –

関連する問題