Selector BUG出现的原因
若Selector的轮询结果为空,也没有wakeup或新消息处理,则发生空轮询,CPU使用率100%,
Netty的解决办法
-
对Selector的select操作周期进行统计,每完成一次空的select操作进行一次计数,
-
若在某个周期内连续发生N次空轮询,则触发了epoll死循环bug。
-
重建Selector,判断是否是其他线程发起的重建请求,若不是则将原SocketChannel从旧的Selector上去除注册,重新注册到新的Selector上,并将原来的Selector关闭。
Netty的高性能之道
1.Netty心跳
(1)定义:心跳其实就是一个简单的请求,
-
对于服务端:会定时清除闲置会话inactive(netty5)channelclose(netty3)
-
对于客户端:用来检测会话是否断开,是否重来,检测网络延迟!
(2)idleStateHandler类 用来检测会话状态
http://blog.csdn.net/baiye_xing/article/details/73351330