Netty序列化算法参数调优

news2024/9/22 13:38:09

目录

一、扩展序列化算法

1、Java

2、Json

二、参数调优

1、CONNECT_TIMEOUT_MILLIS

2、SO_BACKLOG

3、ulimit-n

4、TCP_NODELAY

5、SO_SNDBUF & SO_RCVBUF

6、ALLOCATOR

7、RCVBUF_ALLOCATOR


一、扩展序列化算法

1、Java

我们先写Java中jdk的序列方式,写一个序列化的接口有序列化和反序列化方法,搞个枚举去实现它,然后重写这两个方法。

2、Json

Json的序列化和反序列化我们用的谷歌的gson工具来实现

二、参数调优

1、CONNECT_TIMEOUT_MILLIS

属于SocketChannel的参数

用在客户端建立连接时,如果在指定毫秒内无法连接,就会抛出timeout异常

区分开另一个参数:SO_TIMEOUT主要用在堵塞IO,阻塞IO中accept,read都是无线等待,如果不希望一直阻塞,使用他就可以调整超时时间。

这里要注意:

底层原理是个定时任务,他会读取配置文件的时候创建定时任务,当超过时间就会抛出异常,如果中间又执行了,如果时间内连接成功了,会把任务取消掉

2、SO_BACKLOG

属于ServerSocketChannel的参数

Tcp三次握手完后的连接是在全连接队列里面的,需要服务端一个个去accept,所以accept这个操作是在三次握手之后的。

 

这里就限制为2,一个时间只能处理2个连接,当第三个来的时候就会抛出异常了 

window的默认值是200,linux和mac的128,如果配置文件存在以配置为准

3、ulimit-n

属于操作系统参数,限制一个进程能打开的最大文件描述符的数量

4、TCP_NODELAY

属于SocketChannal参数,如果发送数据的时候有很多小数据包,会把这些小数据包攒一批然后才发出去,为了减少网络请求,但是这样可能会带来延迟就要等待多了才发。建议关闭,默认是false开启的,建议改为true。

5、SO_SNDBUF & SO_RCVBUF

发送缓冲区和接受缓冲区。都是SocketChannal的参数,SO_RCVBUF也可以用于serverSocketChannel参数,建议设置到ServerSocketChannal上,不需要自己调整,操作系统会自动根据网络流量来调整大

6、ALLOCATOR

  • 他就是ByteBuf分配器,有了分配器就可以创建ByteBuf,ctx.alloc()
  • 属于SocketChannal参数

他分配出来的ByteBuf默认是池化的,直接内存

底层是读取环境变量,如果有就用,没有的话如果是安卓就unpooled不是池化,其他就是池化。内存也是,如果默认就是直接内存,也可以自己设置把noPreferDirect改为true,不首选直接内存改为true,默认为false

这个Allocator其实就是byteBuf分配器,就知道这两个配置参数就行

7、RCVBUF_ALLOCATOR

  • 属于SocketChannel参数
  • 控制netty接收缓冲区大小
  • 负责入站数据的分配,决定入站缓冲区的大小(并可以动态调整),统一采用direct直接内存,具体池化还是非池化还是由ALLOCATOR来决定的

为什么是直接内存固定的呢?因为我们从网络读取数据的时候,直接内存的效率是比堆内存的效率高的,因为零拷贝优化,少一次复制,所以netty对io的读写就强制用直接内存了。但是在handler内部通过allocator分配出来的byteBuf我们就可以自己指定。

他底层会调用之前的ALLOCATOR分配器来分配,所以由分配器来决定池化还是非池化,然后调用分配器的ioBuffer来创,这个ioBuffer是固定直接内存的,这个ioBuffer会传入参数,这个参数是大小,源码里面是传入guess方法返回的大小,这个是猜测需要的大小动态进行调整的,如果实际数据量大就会是个比较大的,小就小,根据这几次的数据量来决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/732932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ系列(28)--RabbitMQ使用Federation Queue(联邦队列)解决异地访问延迟问题

前言: 联邦队列可以在多个Broker节点(或者集群)之间为单个队列提供均衡负载的功能。一个联邦队列可以连接一个或者多个上游队列(upstream queue),并从这些上游队列中获取消息以满足本地消费者消费消息的需求。 1、Federation Queue工作原理图 2、添加策…

Oracle19c默认用户名system密码不正确不能登录问题解决

Oracle19c默认用户名system密码不正确不能登录问题解决 1、oracle 命令乱码问题 oracle乱码问题一般是由于oracle字符集设置和操作系统字符集设置不一致造成的。 查看oracle字符集方式如下: 1.进入sqlplus 命令: sqlplus /nolog2.以系统管理员身份连…

【Git原理与使用】-- 企业级开发模型

目录 引入 系统开发环境 Git 分支设计规范 master 分支 release 分支 develop 分支 feature 分支 hotfix 分支 开发场景 - 基于git flow模型的实践 DevOps研发平台 修复测试环境 Bug 修改预发布环境 Bug 修改正式环境 Bug 紧急修复正式环境 Bug 拓展实践 都说&a…

java的RSA加密解密示例

RSA算法是一种非对称加密算法,公钥和私钥都可以用于加密和解密操作。在RSA算法中,公钥用于加密数据,私钥用于解密数据。 具体来说,使用公钥加密的数据只能使用相应的私钥进行解密。而使用私钥加密的数据则可以使用相应的公钥进行…

【云原生|云计算系列】云计算基础概念

欢迎来到云原生专题的云计算系列第一篇博客,我们将探索云计算的基础知识,以帮助您深入了解这个迅速发展的领域。在前一篇博客中,我们介绍了云原生的概念和重要性,强调了它作为云计算的核心理念和实践的关键角色。本篇博客将进一步…

基于单片机智能水杯 保温杯 定时提醒喝水 温度控制的设计与实现

功能介绍 以51单片机作为主控系统;LCD1602液晶显示当前水温,定时提醒,水量变化DS18B20检测当前水体温度;水位传感器检测当前水位;继电器驱动加热片进行水温加热;定时提醒喝水,蜂鸣器报警&#x…

Vue + Volo.Abp 实现OAuth2.0客户端授权模式认证

文章目录 注册ClientOAuth2.0授权创建vue-oidc-client创建OAuth2.0认证跳转获取令牌创建回调页面创建退出登录 最终效果 Volo.Abp的 身份服务器模块默认使用 IdentityServer4实现身份认证。 IdentityServer4是一个开源的OpenID Connect和OAuth 2.0框架,它实现了这…

第41节:cesium 闪烁效果-熊出没(含源码+视频)

结果示例: 点的闪烁:1.逐渐放大后消失;2.点闪烁。 图的闪烁:熊出没,含自定义显示文字效果。 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false">

在当今这个信息时代,互联网中的隐私越来越重要,究竟是隐私换便利还是花钱护隐私呢?

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 网上注册内容时不要填写个人私密信息&#xff1a;互联网时代用户数和用户信息量已然和企业的盈利关联了起来&#xff0c;企业希望尽可能多地获取用户信息。但是很多企业在数据保护上所做的工作存在缺…

java.lang.IllegalArgumentException: Not a managed type

说在前面 真的哭死&#xff0c;全网所有报错都试过&#xff0c;都不是我的问题。解决之后太舒服了&#xff01; 第一个报错 首先&#xff0c;报错没有 TableGenerators 这个类&#xff0c;去 Jar 包看了一下还真没有。 这个类在 Javax 包的 2.2 版本有&#xff0c;添加如下…

Linux 网络延迟排查方法详解

概要 在 Linux 服务器中&#xff0c;可以通过内核调优、DPDK 以及 XDP 等多种方式提高服务器的抗攻击能力&#xff0c;降低 DDoS 对正常服务的影响。在应用程序中&#xff0c;可以使用各级缓存、WAF、CDN 等来缓解 DDoS 对应用程序的影响。 但是需要注意的是&#xff0c;如果 …

easyexcel 自定义列的导出

公司最近有个需求 就是将day这一列 变为excel表格表头&#xff0c;然后列显示薪水。 然后再到网上找教程最终终于找到相关的大神写的博客&#xff0c;具体网址忘记了。抱歉。现在写下具体教程。 ExcelHead 代码 import lombok.Data;/*** author hunterhou* date 2023/2/28 10:…

[分块][STL][树]【Centroids】不一样的解法

前言 一道好题&#xff0c;也就花了我一个下午而已。 本人做法比较清奇&#xff0c;可以当做开阔思路参考&#xff0c;并不太建议实操&#xff08;太难调了&#xff01;&#xff09;。 文章较啰嗦&#xff0c;谅解。 思路 众所周知&#xff0c;我并不太喜推式子&#xff0…

37.RocketMQ之Broker消息存储源码分析

highlight: arduino-light 消息存储文件 rocketMQ的消息持久化在我们在搭建集群时都特意指定的文件存储路径,进入指定的store目录下就可以看到。 下面介绍各文件含义 CommitLog 存储消息的元数据。produce发出的所有消息都会顺序存入到CommitLog文件当中。 CommitLog由多个文件…

javassist implements interface 模拟mybatis 生成代理类

动态创建代理对象的工具类 package com.wsd.util;import org.apache.ibatis.javassist.ClassPool; import org.apache.ibatis.javassist.CtClass; import org.apache.ibatis.javassist.CtMethod; import org.apache.ibatis.session.SqlSession;import java.lang.reflect.Const…

[工业互联-14]:机器人操作系统ROS与ROS2是如何提升实时性的?

目录 第1章 简介 第2章 历史 第3章 特点 &#xff08;1&#xff09;点对点设计 &#xff08;2&#xff09;不依赖编程语言 &#xff08;3&#xff09;精简与集成 &#xff08;4&#xff09;便于测试 &#xff08;5&#xff09;开源 &#xff08;6&#xff09;强大的库及…

ESP32连接云服务器【WebSocket】

ESP32连接云服务器【ESP32宝塔面板】 文章目录 ESP32连接云服务器【ESP32宝塔面板】&#x1f468;‍&#x1f3eb;内容1&#xff1a;背景&#x1f468;‍⚖️内容2&#xff1a;服务器配置&#x1f468;‍&#x1f4bb;内容3&#xff1a;ESP32配置 &#x1f468;‍&#x1f3eb;…

3.5.核函数的定义和使用

目录 前言1. 核函数2. 核函数案例总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-核函数 课程大纲可看下面…

使用infura创建以太坊网络

创建账号 https://www.infura.io/zh 进入控制台Dashboard&#xff0c;选择CREATE API KEY 创建成功后&#xff0c;进入API KEY查看&#xff0c;使用PostMan测试 返回result即为当前区块。

Linux安装配置Oracle+plsql安装配置(超详细)

注意&#xff1a;本文有大量的界面截图&#xff0c;如观看效果不佳可前往文字版&#xff1a; 目录 1 安装虚拟机系统 1.1 安装虚拟机 2.配置虚拟机 2.1 设置机器名 2.2 修改域名映射 2.3 固定IP地址 ​ 2.4 关闭防火墙 2.5 更改安全机制 2.6 重启reboot 3 修改配置 3.1 …