分布式架构学习之:023--Dubbo线程模型

来源:互联网 发布:java纯数字正则表达式 编辑:程序博客网 时间:2024/06/14 10:09

线程模型

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自动获取本机IP2.0.5以上版本<dubbo:protocol>threadpoolthreadpoolstring可选fixed性能调优线程池类型,可选:fixed/cached2.0.5以上版本<dubbo:protocol>threadsthreadsint可选100性能调优服务线程池大小(固定大小)2.0.5以上版本<dubbo:protocol>iothreadsthreadsint可选cpu个数+1性能调优io线程池大小(固定大小)2.0.5以上版本<dubbo:protocol>acceptsacceptsint可选0性能调优服务提供方最大可接受连接数2.0.5以上版本<dubbo:protocol>payloadpayloadint可选88388608(=8M)性能调优请求及响应数据包大小限制,单位:字节2.0.5以上版本<dubbo:protocol>codeccodecstring可选dubbo性能调优协议编码方式2.0.5以上版本<dubbo:protocol>serializationserializationstring可选dubbo协议缺省为hessian2,rmi协议缺省为java,http协议缺省为json性能调优协议序列化方式,当协议支持多种序列化方式时使用,比如:dubbo协议的dubbo,hessian2,java,compactedjava,以及http协议的json等2.0.5以上版本<dubbo:protocol>accesslogaccesslogstring/boolean可选 服务治理设为true,将向logger中输出访问日志,也可填写访问日志文件路径,直接把访问日志输出到指定文件2.0.5以上版本<dubbo:protocol>path<path>string可选 服务发现提供者上下文路径,为服务path的前缀2.0.5以上版本<dubbo:protocol>transportertransporterstring可选dubbo协议缺省为netty性能调优协议的服务端和客户端实现类型,比如:dubbo协议的mina,netty等,可以分拆为server和client配置2.0.5以上版本<dubbo:protocol>serverserverstring可选dubbo协议缺省为netty,http协议缺省为servlet性能调优协议的服务器端实现类型,比如:dubbo协议的mina,netty等,http协议的jetty,servlet等2.0.5以上版本<dubbo:protocol>clientclientstring可选dubbo协议缺省为netty性能调优协议的客户端实现类型,比如:dubbo协议的mina,netty等2.0.5以上版本<dubbo:protocol>dispatcherdispatcherstring可选dubbo协议缺省为all性能调优协议的消息派发方式,用于指定线程模型,比如:dubbo协议的all, direct, message, execution, connection等2.1.0以上版本<dubbo:protocol>queuesqueuesint可选0性能调优线程池队列大小,当线程池满时,排队等待执行的队列大小,建议不要设置,当线程程池时应立即失败,重试其它服务提供机器,而不是排队,除非有特殊需求。2.0.5以上版本<dubbo:protocol>charsetcharsetstring可选UTF-8性能调优序列化编码2.0.5以上版本<dubbo:protocol>bufferbufferint可选8192性能调优网络读写缓冲区大小2.0.5以上版本<dubbo:protocol>heartbeatheartbeatint可选0性能调优心跳间隔,对于长连接,当物理层断开时,比如拔网线,TCP的FIN消息来不及发送,对方收不到断开事件,此时需要心跳来帮助检查连接是否已断开2.0.10以上版本<dubbo:protocol>telnettelnetstring可选 服务治理所支持的telnet命令,多个命令用逗号分隔2.0.5以上版本<dubbo:protocol>registerregisterboolean可选true服务治理该协议的服务是否注册到注册中心2.0.8以上版本<dubbo:protocol>contextpathcontextpathString可选缺省为空串服务治理 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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝退款不退怎么办 qq密码记不着了怎么办 退货填错地址怎么办 淘宝店主出门发货怎么办 化妆品囤货太多怎么办 查分网页崩溃怎么办 记事本回车键不能换行怎么办 网页xml 载入失效怎么办 网页没有搜索栏怎么办 咖喱调料打开了怎么办 煮咖喱水放多了怎么办 营业执照4年没用怎么办 刷赞网站打不开怎么办 网页界面变大了怎么办 照片在易企秀放不完整怎么办 易企秀审核未通过怎么办 微信文件过期怎么办 商家一直不退款怎么办 商家不退运费怎么办 电源标签没了怎么办 淘宝退货的邮费怎么办 淘宝店铺未授权怎么办 商家收款不发货怎么办 厂家收款不发货怎么办 微信支付没到账怎么办 二维码被涂了怎么办 手机老是卡顿怎么办 买完东西降价怎么办 买家不补邮费怎么办 win10网络初始化失败怎么办 win10电脑初始化失败怎么办 获取ip地址失败怎么办 oppor11开不了机怎么办 拼多多商家发错货怎么办 刷好评兼职骗怎么办 公司不想经营了怎么办 外地开公司手续怎么办 淘宝周平均值5.8怎么办 店铺宝贝降权怎么办 淘宝链接被屏蔽怎么办 闲鱼宝贝被降权怎么办