日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

工作中遇到以下報(bào)錯(cuò)信息

[plain]?view plain?copy
  • 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]]??
  • 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]]??
  • ????at?com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload(AbstractCodec.java:49)??
  • ????at?com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeResponse(ExchangeCodec.java:285)??
  • ????at?com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:77)??
  • ????at?com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:39)??
  • ????at?com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:81)??

  • 原因:

    當(dāng)dubbo服務(wù)提供層向消費(fèi)層傳輸大數(shù)據(jù)容量的對(duì)象時(shí),會(huì)受到Dubbo的限制,報(bào)類似如下異常:

    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(默認(rèn)為8M,即8388608)

    ?

    第二種方案

    再dubbo-provider.xml文件配置(下文有服務(wù)提供者協(xié)議配置詳細(xì)說(shuō)明)

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

    ?

    ?

    第三種方案


    1、在項(xiàng)目中集成MongoDB;

    2、在service層把大容量數(shù)據(jù)存放到MongoDB中;

    3、在web層從MongoDB中取出大容量數(shù)據(jù)。

    線程模型

    http://dubbo.io/User+Guide-zh.htm 用戶指南>>線程模型 類似于數(shù)據(jù)庫(kù)的連接池

    (+) (#)

    事件處理線程說(shuō)明
    • 如果事件處理的邏輯能迅速完成,并且不會(huì)發(fā)起新的IO請(qǐng)求,比如只是在內(nèi)存中記個(gè)標(biāo)識(shí),則直接在IO線程上處理更快,因?yàn)闇p少了線程池調(diào)度。
    • 但如果事件處理邏輯較慢,或者需要發(fā)起新的IO請(qǐng)求,比如需要查詢數(shù)據(jù)庫(kù),則必須派發(fā)到線程池,否則IO線程阻塞,將導(dǎo)致不能接收其它請(qǐng)求。
    • 如果用IO線程處理事件,又在事件處理過(guò)程中發(fā)起新的IO請(qǐng)求,比如在連接事件中發(fā)起登錄請(qǐng)求,會(huì)報(bào)“可能引發(fā)死鎖”異常,但不會(huì)真死鎖。
    • Dispatcher
      • all 所有消息都派發(fā)到線程池,包括請(qǐng)求,響應(yīng),連接事件,斷開(kāi)事件,心跳等。
      • direct 所有消息都不派發(fā)到線程池,全部在IO線程上直接執(zhí)行。
      • message 只有請(qǐng)求響應(yīng)消息派發(fā)到線程池,其它連接斷開(kāi)事件,心跳等消息,直接在IO線程上執(zhí)行。
      • execution 只請(qǐng)求消息派發(fā)到線程池,不含響應(yīng),響應(yīng)和其它連接斷開(kāi)事件,心跳等消息,直接在IO線程上執(zhí)行。
      • connection 在IO線程上,將連接斷開(kāi)事件放入隊(duì)列,有序逐個(gè)執(zhí)行,其它消息派發(fā)到線程池。
    • ThreadPool
      • fixed 固定大小線程池,啟動(dòng)時(shí)建立線程,不關(guān)閉,一直持有。(缺省)
      • cached 緩存線程池,空閑一分鐘自動(dòng)刪除,需要時(shí)重建。
      • limited 可伸縮線程池,但池中的線程數(shù)只會(huì)增長(zhǎng)不會(huì)收縮。(為避免收縮時(shí)突然來(lái)了大流量引起的性能問(wèn)題)。

    ?

    配置如:

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

    ?

    配置標(biāo)簽

    <dubbo:provider/>

    <dubbo:protocol/>

    例:

    <!-- 當(dāng)ProtocolConfig和ServiceConfig某屬性沒(méi)有配置時(shí),采用此缺省值 -->
    <dubbo:provider timeout="10000" threadpool="fixed" threads="100" accepts="1000" />

    <dubbo:protocol/>

    ?

    (+) (#)

    服務(wù)提供者協(xié)議配置:
    配置類:com.alibaba.dubbo.config.ProtocolConfig
    說(shuō)明:如果需要支持多協(xié)議,可以聲明多個(gè)<dubbo:protocol>標(biāo)簽,并在<dubbo:service>中通過(guò)protocol屬性指定使用的協(xié)議。

    標(biāo)簽屬性對(duì)應(yīng)URL參數(shù)類型是否必填缺省值作用描述兼容性
    <dubbo:protocol>id?string可選dubbo配置關(guān)聯(lián)協(xié)議BeanId,可以在<dubbo:service protocol="">中引用此ID,如果ID不填,缺省和name屬性值一樣,重復(fù)則在name后加序號(hào)。2.0.5以上版本
    <dubbo:protocol>name<protocol>string必填dubbo性能調(diào)優(yōu)協(xié)議名稱2.0.5以上版本
    <dubbo:protocol>port<port>int可選dubbo協(xié)議缺省端口為20880,rmi協(xié)議缺省端口為1099,http和hessian協(xié)議缺省端口為80?
    如果配置為-1?或者?沒(méi)有配置port,則會(huì)分配一個(gè)沒(méi)有被占用的端口。Dubbo?2.4.0+,分配的端口在協(xié)議缺省端口的基礎(chǔ)上增長(zhǎng),確保端口段可控。
    服務(wù)發(fā)現(xiàn)服務(wù)端口2.0.5以上版本
    <dubbo:protocol>host<host>string可選自動(dòng)查找本機(jī)IP服務(wù)發(fā)現(xiàn)-服務(wù)主機(jī)名,多網(wǎng)卡選擇或指定VIP及域名時(shí)使用,為空則自動(dòng)查找本機(jī)IP,-建議不要配置,讓Dubbo自動(dòng)獲取本機(jī)IP2.0.5以上版本
    <dubbo:protocol>threadpoolthreadpoolstring可選fixed性能調(diào)優(yōu)線程池類型,可選:fixed/cached2.0.5以上版本
    <dubbo:protocol>threadsthreadsint可選100性能調(diào)優(yōu)服務(wù)線程池大小(固定大小)2.0.5以上版本
    <dubbo:protocol>iothreadsthreadsint可選cpu個(gè)數(shù)+1性能調(diào)優(yōu)io線程池大小(固定大小)2.0.5以上版本
    <dubbo:protocol>acceptsacceptsint可選0性能調(diào)優(yōu)服務(wù)提供方最大可接受連接數(shù)2.0.5以上版本
    <dubbo:protocol>payloadpayloadint可選88388608(=8M)性能調(diào)優(yōu)請(qǐng)求及響應(yīng)數(shù)據(jù)包大小限制,單位:字節(jié)2.0.5以上版本
    <dubbo:protocol>codeccodecstring可選dubbo性能調(diào)優(yōu)協(xié)議編碼方式2.0.5以上版本
    <dubbo:protocol>serializationserializationstring可選dubbo協(xié)議缺省為hessian2,rmi協(xié)議缺省為java,http協(xié)議缺省為json性能調(diào)優(yōu)協(xié)議序列化方式,當(dāng)協(xié)議支持多種序列化方式時(shí)使用,比如:dubbo協(xié)議的dubbo,hessian2,java,compactedjava,以及http協(xié)議的json等2.0.5以上版本
    <dubbo:protocol>accesslogaccesslogstring/boolean可選?服務(wù)治理設(shè)為true,將向logger中輸出訪問(wèn)日志,也可填寫(xiě)訪問(wèn)日志文件路徑,直接把訪問(wèn)日志輸出到指定文件2.0.5以上版本
    <dubbo:protocol>path<path>string可選?服務(wù)發(fā)現(xiàn)提供者上下文路徑,為服務(wù)path的前綴2.0.5以上版本
    <dubbo:protocol>transportertransporterstring可選dubbo協(xié)議缺省為netty性能調(diào)優(yōu)協(xié)議的服務(wù)端和客戶端實(shí)現(xiàn)類型,比如:dubbo協(xié)議的mina,netty等,可以分拆為server和client配置2.0.5以上版本
    <dubbo:protocol>serverserverstring可選dubbo協(xié)議缺省為netty,http協(xié)議缺省為servlet性能調(diào)優(yōu)協(xié)議的服務(wù)器端實(shí)現(xiàn)類型,比如:dubbo協(xié)議的mina,netty等,http協(xié)議的jetty,servlet等2.0.5以上版本
    <dubbo:protocol>clientclientstring可選dubbo協(xié)議缺省為netty性能調(diào)優(yōu)協(xié)議的客戶端實(shí)現(xiàn)類型,比如:dubbo協(xié)議的mina,netty等2.0.5以上版本
    <dubbo:protocol>dispatcherdispatcherstring可選dubbo協(xié)議缺省為all性能調(diào)優(yōu)協(xié)議的消息派發(fā)方式,用于指定線程模型,比如:dubbo協(xié)議的all, direct, message, execution, connection等2.1.0以上版本
    <dubbo:protocol>queuesqueuesint可選0性能調(diào)優(yōu)線程池隊(duì)列大小,當(dāng)線程池滿時(shí),排隊(duì)等待執(zhí)行的隊(duì)列大小,建議不要設(shè)置,當(dāng)線程程池時(shí)應(yīng)立即失敗,重試其它服務(wù)提供機(jī)器,而不是排隊(duì),除非有特殊需求。2.0.5以上版本
    <dubbo:protocol>charsetcharsetstring可選UTF-8性能調(diào)優(yōu)序列化編碼2.0.5以上版本
    <dubbo:protocol>bufferbufferint可選8192性能調(diào)優(yōu)網(wǎng)絡(luò)讀寫(xiě)緩沖區(qū)大小2.0.5以上版本
    <dubbo:protocol>heartbeatheartbeatint可選0性能調(diào)優(yōu)心跳間隔,對(duì)于長(zhǎng)連接,當(dāng)物理層斷開(kāi)時(shí),比如拔網(wǎng)線,TCP的FIN消息來(lái)不及發(fā)送,對(duì)方收不到斷開(kāi)事件,此時(shí)需要心跳來(lái)幫助檢查連接是否已斷開(kāi)2.0.10以上版本
    <dubbo:protocol>telnettelnetstring可選?服務(wù)治理所支持的telnet命令,多個(gè)命令用逗號(hào)分隔2.0.5以上版本
    <dubbo:protocol>registerregisterboolean可選true服務(wù)治理該協(xié)議的服務(wù)是否注冊(cè)到注冊(cè)中心2.0.8以上版本
    <dubbo:protocol>contextpathcontextpathString可選缺省為空串服務(wù)治理?2.0.6以上版本

    Linux?用戶線程數(shù)限制導(dǎo)致的?java.lang.OutOfMemoryError:?unable?to?create?new?native?thread異常

    系統(tǒng)默認(rèn)最大的線程數(shù)為1024個(gè)

    [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?
    調(diào)整時(shí)要注意:

    ?

    ?

    1、?盡量不要使用?root?用戶來(lái)部署應(yīng)用程序,避免資源耗盡后無(wú)法登錄操作系統(tǒng)。

    ?因?yàn)閞oot用戶默認(rèn)沒(méi)有限制線程數(shù),如果線程過(guò)多,會(huì)使資源占用很多,導(dǎo)致不能關(guān)機(jī),只能硬關(guān)機(jī)

    2、?普通用戶的線程數(shù)限制值要看可用物理內(nèi)存容量來(lái)配置

    [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 ~]#?

    ?

    ?

    ?

    計(jì)算方式:

    ?

    default_nproc?=?total_memory/128K;?

    $?cat?/proc/meminfo?|grep?MemTotal

    $?echo "2941144/128"|bc

    $?ulimit?-u

    ulimit?-a?#?顯示目前資源限制的設(shè)定?

    ulimit?-u?#?用戶最多可開(kāi)啟的程序數(shù)目

    ?重啟,使之生效:#?reboot

    轉(zhuǎn)載于:https://www.cnblogs.com/exmyth/p/8745306.html

    總結(jié)

    以上是生活随笔為你收集整理的dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。