netty面试题汇总
2022-07-29 09:52:24 15 举报
netty面试题汇总
作者其他创作
大纲/内容
上面的情况,epoll_wait只会通知一次。直到下次有读写时,才会通知你。这种模式效率高。
内存池优化
IO线程与业务线程分开
3、GC收集过程
边缘触发
使用Netty提供的链路空闲检测机制不要自己创建定时任务线程池,加重负担
GC调优三个基本原则:1、每次minor gc尽可能多的回收内存,较少应用程序发生fullgc的频率;2、GC内存最大化原则,但是这可能会导致fullgc耗时比较长;3、三选二原则:前面三个指标无法做到同时兼顾。
jdk的select是水平触发netty的epoll是边缘触发
在NioEventLoop#select()解决
1、netty如何解决Epoll的空轮询BUG?
以上如果修改失败,还需要做三步操作需要修改系统对用户打开文件数的软限制和硬限制
设置合理线程数
1
1、修改/etc/security/limits.conf 在其中加上:* soft nofile 1000000* hard nofile 1000000'*'号表示修改所有用户的限制;
突破限制
JVM调优
1、确定调优目标
3、
2、
2、确定服务端内存占用
设置合理的线程数(boss,worker)
水平触发
1、GC数据的采集和研读;2、设置合适的JVM堆大小;3、选择合适的垃圾回收器和回收策略;
及时检测失效连接,将其剔除
1、
在pipeline靠前的位置增加一个handspan style=\"font-size: inherit;\
修改操作系统对用户单一进程同时可打开文件数量的限制
针对收发量不大的场景,可以调小缓冲区大小
2
修改这个数值为1000000
GC三个主要指标:吞吐量,延迟,内存占用
如果自己额外申请ByteBuf用于IO操作,则使用堆外(减少复制)内存池比较好
如何让单机下Netty支持百万长连接?
select,poll是水平触发epoll都支持
计算活跃数据(系统稳定时 长时间存活的java对象):通过GC日志收集GC数据,系统稳定时:老年代+元数据区=活跃数据内存占用大小
netty调优
如果是不涉及网络IO,使用堆内存池,创建效率高
心跳优化
接收和发送缓冲区调优
流控
操作系统
什么是水平触发和边缘触发?
判断Epoll空轮询次数(返回后没有事件),如果超过次数,则重建epoll(Selector)
设置合理的心跳周期,防止定时任务积压
当被监控的fd上有可读写事件时。epoll_wait()会通知程序去读写,如果这次没有把数据全部写完,下次调用epoll_wait时,他还会通知你。知道你读写完为止。
ulimit 命令查看系统允许当前用户进程打开的句柄数限制
0 条评论
下一页