- Netty是如何解决JDK中的Selector BUG的?
背景:调用Selector方法后,会阻塞住,获取上面发生的事件,在JDK 1.6版本开始,在linux内核2.2版本开始,当网卡发生一个变化(并不是有数据发生),就会唤醒selector。
但是selector只会关注连接,接受连接,读和写事件,被唤醒的事件不是selector所要的事件,这样获取不到事件,这样就会反复去取,空轮训。
解决办法:Netty中当空轮训次数达到N次的时候,认为进入了Selector Bug,就将selector选择器重新建一次,然后将旧的selecotr事件全部迁移过来。(NioEventLoop.java中select具体实现)
- 如何让单机下基于Netty的应用程序能够支持百万连接?
1.OS需要调优 (进程级别ulimit -n,系统级别cat /proc/sys/fs/file-max)
2.Netty需要调优 (线程数,心跳报文优化(删除无效的连接),发送/接受缓存,内存池,I/O线程和业务线程剥离,流量控制)
3.JVM需要调优(GC调优(尽可能减少Full GC,并且缩短Full GC时长))
- 什么是水平触发(LT)和边缘触发(ET)?
当receive buffer中有数据的时候,水平触发就是一直通知epoll有数据去读取
边缘触发,只会通知一次,当下一次有数据来的时候,才会继续通知。
Netty面试难题分析
最新推荐文章于 2023-12-24 22:27:03 发布