このバグ「My netty Server don't process any message after the following exception.」の理由を突き止めませんでした。
org.jboss.netty.channel.SimpleChannelHandler - EXCEPTION, please implement com.kakapo.unity.handler.RegistrationHandler.exceptionCaught() for proper handling.
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 223,384,284 milliseconds ago. The last packet sent successfully to the server was 223,384,284 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.GeneratedConstructorAccessor13.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3364)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1983)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293)
at snaq.db.CachedPreparedStatement.executeQuery(CachedPreparedStatement.java:81)
at com.kakapo.unity.handler.CustomIPFilterHandler.accept(CustomIPFilterHandler.java:46)
at org.jboss.netty.handler.ipfilter.IpFilteringHandlerImpl.handleUpstream(IpFilteringHandlerImpl.java:118)
at org.jboss.netty.handler.logging.LoggingHandler.handleUpstream(LoggingHandler.java:333)
at org.jboss.netty.channel.Channels.fireChannelConnected(Channels.java:227)
at org.jboss.netty.channel.socket.nio.NioWorker$RegisterTask.run(NioWorker.java:187)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processRegisterTaskQueue(AbstractNioWorker.java:430)
at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:329)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.SocketException: Connection timed out
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)
at java.net.SocketOutputStream.write(SocketOutputStream.java:153)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3345)
... 17 more
しかし、私はすでに auto reconnect = true を JDBC に入れています。また、OrderedMemoryAwareThreadPoolExecutor を使用しています
ExecutionHandler channelExecutionHandler = new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(Runtime.getRuntime()
.availableProcessors(), 0, 0));
awaituninteruptable 関数を使用してチャネルを閉じます。お気に入り
ctx.getChannel().write(new ErrMessage(e.getChannel().getRemoteAddress().toString()).getEncodedMessage())
これにより、何らかの種類の無限ループ アクティビティが発生しますか。現在、サーバーは接続を受け入れ、いかなる種類のメッセージも処理しません。ワーカースレッドとボスがあります。しかし、ロギング ハンドラーは正常に動作します。DB接続を維持するためにsnaq.db.connectionプールを使用しています。