netty 性能调优


netty 性能调优

              

                       

                                    

文件句柄

        

一个tcp连接占用一个文件句柄,可调大服务器文件句柄限制,让netty服务端处理更多连接

            

************

进程文件句柄

      

查看句柄限制:ulimit -u

# centos root用户默认ulimited
[root@b576610f7cd4 /]# ulimit -u
unlimited

           

修改句柄数量:ulimit -u num,该修改方式只对当前会话有效,重启后失效

[root@b576610f7cd4 /]# ulimit -u 100
[root@b576610f7cd4 /]# ulimit -u    
100

          

持久生效修改方式:vi /etc/security/limits.conf,需重启后生效

# 文件中添加如下内容
* soft nofile 10000
* hard nofile 10000

*:表示所有用户,也可指定具体用户(如root)
nofile:文件打开数
10000:单个进程最大打开10000个文件

         

************

系统文件句柄

    

查看系统最大文件句柄:cat /proc/sys/fs/file-max

[root@b576610f7cd4 /]# cat /proc/sys/fs/file-max
524288

             

永久修改文件句柄数:vi /etc/sysctl.conf

文件末尾添加:fs.file-max=2000000
退出后执行:sysctl -p,可立即生效

             

                   

                                    

tcp/ip 参数调优

     

相关参数

net.ipv4.tcp_rmem:每个tcp连接的读缓冲(接收缓冲),共三个值:最小字节数 默认值 最大字节数
net.ipv4.tcp_wmem:每个tcp连接的写缓冲(发送缓冲),共三个值:最小字节数 默认值 最大字节数
net.ipv4.tcp_mem:每个tcp连接占用内存,共三个值:最小字节数 默认值 最大字节数

net.ipv4.tcp_tw_reuse:是否允许将处于time_wait状态的tcp连接进行复用,默认为0(不允许)
net.ipv4.tcp_tw_recycle:是否开启time_wait socket快速回收,默认为0(关闭)
net.ipv4.tcp_fin_timeout:socker关闭时处于FIN_WAIT_2状态的时间,默认为60s

net.ipv4.tcp_keepalive_time:tcp保持存活的时间
tcp_keepalive_intvl:未获得探测响应消息时,每次发送探测消息的间隔
tcp_keepalive_probes:连续未收到探测相应达到指定数量时,tcp失效

        

修改参数:vi /etc/sysctl.conf

net.ipv4.tcp_rmem = 60000 80000 100000
net.ipv4.tcp_wmem = 40000 60000 80000
net.ipv4.tcp_mem = 60000 80000 100000

net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 1800
tcp_keepalive_intvl = 20
tcp_keepalive_probes = 6

          

              

                                    

netty 配置参数

      

socket 参数

SO_BROADCAST:广播模式
SO_REUSEADDR:socket复用,默认false
SO_KEEPALIVE:连接保活,默认关闭
             开启该功能时,tcp会主动探测连接有效性,默认检测间隔为7200s(2h)
 
SO_SNDBUF:socket发送缓冲,cat /proc/sys/net/ipv4/tcp_smem查看大小
SO_RCVBUF:socket接收缓冲,cat /proc/sys/net/ipv4/tcp_rmem查看大小
SO_LINGER:关闭socket的延时时间,默认-1
           -1:调用close立即返回,缓冲区的数据会发送到对端
           0:调用close立即返回,缓冲区的数据不会发送到对端
           大于0:阻塞到数据发送完毕、或者超时
SO_BACKLOG:服务端接收连接的队列长度,如果超过最大值,连接会被拒绝
           windows为200,其余128
SO_TIMEOUT:socket连接接收数据的等待超时时间,默认为0,表示无限等待

         

ip 参数

IP_TOS:设置IP头部的Type-of-Service属性,用于描述IP包的优先级和QoS选项
IP_MULTICAST_TTL:多播数据报的存活跳数(time-to-live)
IP_MULTICAST_LOOP_DISABLED:对应IP参数IP_MULTICAST_LOOP,设置本地回环接口的多播功能
 
IP_MULTICAST_ADDR:对应IP参数IP_MULTICAST_IF,设置对应地址的网卡为多播模式
IP_MULTICAST_IF:对应IP参数IP_MULTICAST_IF2,设置对应地址的网卡为多播模式,支持IPv6

        

tcp 参数

TCP_NODELAY:是否没有延时,立即发送(开启Nagle算法,会延时发送)
             true:禁用Nagle算法,即使用小数据包即时传输
             false:开启Nagle算法,有足够数据量时再发送,数据会有延时
 
TCP_FASTOPEN_CONNECT:是否开启fast open
TCP_FASTOPEN:socket连接中可以处于等待状态的fast-open请求的个数

       

全局参数

AUTO_READ:自动读取,默认true
AUTO_CLOSE:自动关闭
 
CONNECT_TIMEOUT_MILLIS:连接超时时间(毫秒),默认30000(30秒)
ALLOW_HALF_CLOSURE:一个连接远端关闭时,本端是否关闭,默认false(本端连接自动关闭)
 
MAX_MESSAGES_PER_WRITE:一次loop写入的最大消息数
WRITE_SPIN_COUNT:一个Loop写操作执行的最大次数,默认值为1
MESSAGE_SIZE_ESTIMATOR:消息大小估算器,默认为DefaultMessageSizeEstimator
 
SINGLE_EVENTEXECUTOR_PER_GROUP:是否使用单线程执行ChannelPipeline中的事件,默认true

       

              

                                    

netty 应用调优

       

# 线程模型
高并发场景使用主从多线程模型:主线程处理客户端连接,业务线程执行任务逻辑
业务线程池线程数:根据业务执行时间调整工作线程数
对于复杂的业务操作,可在handler里面设置单独的线程池进行处理

# 心跳检测
使用netty提供的链路空闲检测机制,及时剔除失效连接,防止无效连接造成文件句柄积压
设置合理的心跳检测周期(心跳骤起不要过短),防止心跳定时任务积压,造成频繁gc

# 设置合理的收发缓冲区
传输的数据量不大的连接,可设置较小的缓冲区,避免过多的资源占用

# 合理使用内存池
直接内存:i/o操作(如文件读写)、大数据量传输,使用direct buffer
堆内存:纯内存操作、数据传输量不大时,使用堆内存(堆内存创建回收效率较高)

        

                

                                    

jvm 性能调优

   

调优目标:使用合理的内存,达到高吞吐、低延时

          

内存参数:

# 栈空间
-Xss128k:线程使用的栈空间大小为128k

# 堆空间
-Xms20m:最小堆空间
-Xmx20m:最大堆空间
-Xmn10m:新生代堆空间大小
-XX:SurvivorRatio=8:新生代eden和survivor的比值

# 元空间
-XX:MaxMetaspaceSize=128m:jvm元空间128m

# 直接内存
-XX:MaxDirectMemorySize=128m:直接内存128m

            

垃圾收集器参数:

# 单线程垃圾收集器(并发量不大时使用)
-XX:+UseSerialGC:Serial + Serial Old

# 吞吐量优先的垃圾收集器
-XX:+UseParallelGC:Parallel Scavenge + Parallel Old

# 注重低停顿的垃圾收集器
-XX:+UseG1GC:G1垃圾收集器
-XX:+UseZGC:ZGC垃圾收集器(ZGC在java 15正式发布)

           

            

你可能感兴趣的:(netty,netty)