工作中遇到以下报错信息

[plain] view plain copy
  1. cause: java.io.IOException: Data length too large: 10710120, max payload: 8388608, channel: NettyChannel [channel=[id: 0x09396776, /10.195.2.51:48887 => /10.195.2.21:20881]]
  2. java.io.IOException: Data length too large: 10710120, max payload: 8388608, channel: NettyChannel [channel=[id: 0x09396776, /10.195.2.51:48887 => /10.195.2.21:20881]]
  3. at com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload(AbstractCodec.java:49)
  4. at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:285)
  5. at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:77)
  6. at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:39)
  7. at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:81)

原因:

当dubbo服务提供层向消费层传输大数据容量的对象时,会受到Dubbo的限制,报类似如下异常:

com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload() ERROR

Data length too large: 11557050, max payload: 8388608

java.io.IOException: Data length too large: 11557050, max payload: 8388608

解决方案如下,有两种

第一种方案

修改提供方的dubbo配置,

在dubbo.properties 中增加如下

dubbo.protocol.dubbo.payload=11557050(默认为8M,即8388608)

第二种方案

再dubbo-provider.xml文件配置(下文有服务提供者协议配置详细说明)

<dubbo:provider id="payload" payload="11557050"/>

第三种方案

1、在项目中集成MongoDB;

2、在service层把大容量数据存放到MongoDB中;

3、在web层从MongoDB中取出大容量数据。

线程模型

http://dubbo.io/User+Guide-zh.htm 用户指南>>线程模型
类似于数据库的连接池

(+) (#)

事件处理线程说明

  • 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度。
  • 但如果事件处理逻辑较慢,或者需要发起新的IO请求,比如需要查询数据库,则必须派发到线程池,否则IO线程阻塞,将导致不能接收其它请求。
  • 如果用IO线程处理事件,又在事件处理过程中发起新的IO请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。
  • Dispatcher

    • all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。
    • direct 所有消息都不派发到线程池,全部在IO线程上直接执行。
    • message 只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在IO线程上执行。
    • execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在IO线程上执行。
    • connection 在IO线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。
  • ThreadPool

    • fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
    • cached 缓存线程池,空闲一分钟自动删除,需要时重建。
    • limited 可伸缩线程池,但池中的线程数只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)。

配置如:

<dubbo:protocolname="dubbo"dispatcher="all"threadpool="fixed"threads="100"/>

配置标签

<dubbo:provider/>

<dubbo:protocol/>

例:

<!-- 当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值 -->
<dubbo:provider timeout="10000" threadpool="fixed" threads="100" accepts="1000" />

<dubbo:protocol/>

(+) (#)

服务提供者协议配置:
配置类:com.alibaba.dubbo.config.ProtocolConfig
说明:如果需要支持多协议,可以声明多个<dubbo:protocol>标签,并在<dubbo:service>中通过protocol属性指定使用的协议。

标签 属性 对应URL参数 类型 是否必填 缺省值 作用 描述 兼容性
<dubbo:protocol> id   string 可选 dubbo 配置关联 协议BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,缺省和name属性值一样,重复则在name后加序号。 2.0.5以上版本
<dubbo:protocol> name <protocol> string 必填 dubbo 性能调优 协议名称 2.0.5以上版本
<dubbo:protocol> port <port> int 可选 dubbo协议缺省端口为20880,rmi协议缺省端口为1099,http和hessian协议缺省端口为80 
如果配置为-1 或者 没有配置port,则会分配一个没有被占用的端口。Dubbo 2.4.0+,分配的端口在协议缺省端口的基础上增长,确保端口段可控。
服务发现 服务端口 2.0.5以上版本
<dubbo:protocol> host <host> string 可选 自动查找本机IP 服务发现 -服务主机名,多网卡选择或指定VIP及域名时使用,为空则自动查找本机IP,-建议不要配置,让Dubbo自动获取本机IP 2.0.5以上版本
<dubbo:protocol> threadpool threadpool string 可选 fixed 性能调优 线程池类型,可选:fixed/cached 2.0.5以上版本
<dubbo:protocol> threads threads int 可选 100 性能调优 服务线程池大小(固定大小) 2.0.5以上版本
<dubbo:protocol> iothreads threads int 可选 cpu个数+1 性能调优 io线程池大小(固定大小) 2.0.5以上版本
<dubbo:protocol> accepts accepts int 可选 0 性能调优 服务提供方最大可接受连接数 2.0.5以上版本
<dubbo:protocol> payload payload int 可选 88388608(=8M) 性能调优 请求及响应数据包大小限制,单位:字节 2.0.5以上版本
<dubbo:protocol> codec codec string 可选 dubbo 性能调优 协议编码方式 2.0.5以上版本
<dubbo:protocol> serialization serialization string 可选 dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json 性能调优 协议序列化方式,当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等 2.0.5以上版本
<dubbo:protocol> accesslog accesslog string/boolean 可选   服务治理 设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件 2.0.5以上版本
<dubbo:protocol> path <path> string 可选   服务发现 提供者上下文路径,为服务path的前缀 2.0.5以上版本
<dubbo:protocol> transporter transporter string 可选 dubbo协议缺省为netty 性能调优 协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置 2.0.5以上版本
<dubbo:protocol> server server string 可选 dubbo协议缺省为netty,http协议缺省为servlet 性能调优 协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等 2.0.5以上版本
<dubbo:protocol> client client string 可选 dubbo协议缺省为netty 性能调优 协议的客户端实现类型,比如:dubbo协议的mina,netty等 2.0.5以上版本
<dubbo:protocol> dispatcher dispatcher string 可选 dubbo协议缺省为all 性能调优 协议的消息派发方式,用于指定线程模型,比如:dubbo协议的all, direct, message, execution, connection等 2.1.0以上版本
<dubbo:protocol> queues queues int 可选 0 性能调优 线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程程池时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。 2.0.5以上版本
<dubbo:protocol> charset charset string 可选 UTF-8 性能调优 序列化编码 2.0.5以上版本
<dubbo:protocol> buffer buffer int 可选 8192 性能调优 网络读写缓冲区大小 2.0.5以上版本
<dubbo:protocol> heartbeat heartbeat int 可选 0 性能调优 心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开 2.0.10以上版本
<dubbo:protocol> telnet telnet string 可选   服务治理 所支持的telnet命令,多个命令用逗号分隔 2.0.5以上版本
<dubbo:protocol> register register boolean 可选 true 服务治理 该协议的服务是否注册到注册中心 2.0.8以上版本
<dubbo:protocol> contextpath contextpath String 可选 缺省为空串 服务治理   2.0.6以上版本

Linux 用户线程数限制导致的 java.lang.OutOfMemoryError: unable to create new native thread异常

系统默认最大的线程数为1024个

[root@edu-provider-01 ~]# cat /etc/security/limits.d/90-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     1024
root       soft    nproc     unlimited

[root@edu-provider-01 ~]# vi /etc/security/limits.d/90-nproc.conf 
调整时要注意:

1、 尽量不要使用 root 用户来部署应用程序,避免资源耗尽后无法登录操作系统。

因为root用户默认没有限制线程数,如果线程过多,会使资源占用很多,导致不能关机,只能硬关机

2、 普通用户的线程数限制值要看可用物理内存容量来配置

[root@edu-provider-01 ~]# cat /proc/meminfo |grep MemTotal 
MemTotal:        2941144 kB
[root@edu-provider-01 ~]# echo "2941144/128"|bc
22977
[root@edu-provider-01 ~]# ulimit -u
1024

[1]+  Stopped                 vi /etc/security/limits.d/90-nproc.conf
[root@edu-provider-01 ~]# vi /etc/security/limits.d/90-nproc.conf 
[root@edu-provider-01 ~]# cat /etc/security/limits.d/90-nproc.conf 
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     12000
root       soft    nproc     unlimited
[root@edu-provider-01 ~]#

计算方式:

default_nproc = total_memory/128K;

$ cat /proc/meminfo |grep MemTotal

$ echo "2941144/128"|bc

$ ulimit -u

ulimit -a # 显示目前资源限制的设定

ulimit -u # 用户最多可开启的程序数目

重启,使之生效:# reboot

转载于:https://www.cnblogs.com/exmyth/p/8745306.html

dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明相关推荐

  1. Dubbo 报错 Data length too large

    报错信息如下: 07/01/20 06:15:37:037 CST] main ERROR transport.AbstractCodec: Data length too large: 398890 ...

  2. Dubbo Data length too large: xxx, max payload: xxx问题解决

    问题描述: Caused by: java.util.concurrent.ExecutionException: org.apache.dubbo.remoting.RemotingExceptio ...

  3. mysql text 最大长度 报错 Row size too large. The maximum row size for the used table type

    数据类型长度如下 TINYTEXT 256 bytes   TEXT 65,535 bytes ~64kb MEDIUMTEXT  16,777,215 bytes ~16MB LONGTEXT 4, ...

  4. Echart..js插件渲染报错 data.length1?

    问题 getJSON提交 返回数据正常,在传入参数进行序列化,渲染报表时报错 option.data.length < 1. 分析  1.可能情况一: . 可自己明明是getJSON()把渲染放 ...

  5. mysql报错 Row size too large ( 8126)

    报错信息 Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAM ...

  6. 使用mybatisPlus时,报错 Data truncation: Out of range value for column ‘id‘ at row 1

    报错信息如下: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for co ...

  7. dubbo报错Forbid consumer xxxx access service xxx from registryxxx

    使用Springboot+dubbo构建的项目.在启动过程中没有报错.浏览器进行访问时,controller报错: com.alibaba.dubbo.rpc.RpcException: Forbid ...

  8. Grafana报错 414 Request-URI Too Large

    Grafana报错 414 报错 Network error request URI too large INFO[09-03|06:26:09] Request Completed logger=c ...

  9. MySQL报错:Data truncated for column 的原因之一

    关于MySQL报错:执行数据更新时报错提醒:Data truncated for column '字段名' at row 1. 原因有1:先前已经定义了"列表名",并且已经 *赋值 ...

最新文章

  1. CSS Modules 用法教程
  2. 送30块树莓派PICO 开发板!
  3. Spring、SpringMVC和SpringBoot之间的关系
  4. list python 访问 键值对_学完Python,我决定熬夜整理这篇总结...
  5. Alexey 大神接棒,YOLOv4 重磅来袭!快来一睹论文真容吧!| 原力计划
  6. Lambda表达式妙用
  7. 由于计算机是中文名ccs软件安装出现错误_UG软件不会解决的二十个问题解决方法总结...
  8. 未检测到ca设备或ca驱动异常_安川伺服驱动器SGDV报警原因及处理措施
  9. 从PXE启动安装Linux
  10. 我的实用小软件(持续更新)
  11. 24点游戏(C++)
  12. 【Win10】【开始菜单打不开】任务栏修复
  13. 计算机怎么放映文档,如何从Apple TV上的计算机播放视频文件
  14. 超级简单理解工厂模式
  15. 蚂蚁金服CTO程立:创新发展数字时代金融关键技术
  16. Sentinel-高可用流量管理框架
  17. 刚毕业月薪3000,心好慌
  18. 如何提取pcap文件中的TCP流
  19. 解决普通笔记本无法连接iPhone热点的问题
  20. Currency Translation in Bex Query Variable 2

热门文章

  1. SAP Cloud for Customer Sales Order Pricing Date的配置
  2. SAP CRM Product ACE check调试
  3. ERP和C4C中的function location
  4. 为什么ABAP整型的1转成string之后,后面会多个空格 1
  5. linux的各种版本,各种版本Linux系统下载
  6. 在python中value是啥意思_【Python】python,字典中如何根据value值取对应的key值
  7. python爬虫用多线程还是多进程_python爬虫之多线程、多进程爬虫
  8. db2 创建样本数据库_db2创建数据库
  9. gis环境设置在哪_三维GIS平台的可视化应用 (下)
  10. java外围设计_Java 编程(23 种设计模式)