Netty面试难题分析

  1. Netty是如何解决JDK中的Selector BUG的?
    背景:调用Selector方法后,会阻塞住,获取上面发生的事件,在JDK 1.6版本开始,在linux内核2.2版本开始,当网卡发生一个变化(并不是有数据发生),就会唤醒selector。
            但是selector只会关注连接,接受连接,读和写事件,被唤醒的事件不是selector所要的事件,这样获取不到事件,这样就会反复去取,空轮训。
    解决办法:Netty中当空轮训次数达到N次的时候,认为进入了Selector Bug,就将selector选择器重新建一次,然后将旧的selecotr事件全部迁移过来。(NioEventLoop.java中select具体实现)

     
  2. 如何让单机下基于Netty的应用程序能够支持百万连接?
    1.OS需要调优 (进程级别ulimit -n,系统级别cat /proc/sys/fs/file-max)
    2.Netty需要调优 (线程数,心跳报文优化(删除无效的连接),发送/接受缓存,内存池,I/O线程和业务线程剥离,流量控制)
    3.JVM需要调优(GC调优(尽可能减少Full GC,并且缩短Full GC时长))

     
  3. 什么是水平触发(LT)和边缘触发(ET)?
    当receive buffer中有数据的时候,水平触发就是一直通知epoll有数据去读取
    边缘触发,只会通知一次,当下一次有数据来的时候,才会继续通知。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值