`

dubbo 线程模型

阅读更多

事件处理线程说明
如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识,则直接在IO线程上处理更快,因为减少了线程池调度。
但如果事件处理逻辑较慢,或者需要发起新的IO请求,比如需要查询数据库,则必须派发到线程池,否则IO线程阻塞,将导致不能接收其它请求。
如果用IO线程处理事件,又在事件处理过程中发起新的IO请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。
Dispatcher
all 所有消息都派发到线程池,包括请求,响应,连接事件,断开事件,心跳等。
direct 所有消息都不派发到线程池,全部在IO线程上直接执行。
message 只有请求响应消息派发到线程池,其它连接断开事件,心跳等消息,直接在IO线程上执行。
execution 只请求消息派发到线程池,不含响应,响应和其它连接断开事件,心跳等消息,直接在IO线程上执行。
connection 在IO线程上,将连接断开事件放入队列,有序逐个执行,其它消息派发到线程池。
ThreadPool
fixed 固定大小线程池,启动时建立线程,不关闭,一直持有。(缺省)
cached 缓存线程池,空闲一分钟自动删除,需要时重建。
limited 可伸缩线程池,但池中的线程数只会增长不会收缩。(为避免收缩时突然来了大流量引起的性能问题)。
配置如:

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

provider

实战经验分享(属用性能调优):
Linux 用户线程数限制导致的 java.lang.OutOfMemoryError: unable to create new native thread
异常
# vi /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.
root soft nproc unlimited
* soft nproc 20480
调整时要注意:
1、 尽量不要使用 root 用户来部署应用程序, 避免资源耗尽后无法登录操作系统。
2、 普通用户的线程数限制值要看可用物理内存容量来配置

计算方式:
default_nproc = total_memory/128K;
$ cat /proc/meminfo |grep MemTotal
$ echo "5993104 / 128"| bc
$ ulimit -u
ulimit -a # 显示目前资源限制的设定
ulimit -u # 用户最多可开启的程序数目
重启, 使之生效: # reboot


分享到:
评论

相关推荐

    Dubbo线程模型(结合Linux线程数限制配置的实战经验分享).docx

    在深入探讨Dubbo线程模型之前,我们首先需要理解什么是线程模型。线程模型是分布式服务框架中处理并发请求的一种机制,它决定了服务提供者如何分配和管理线程来执行客户端的调用请求。Dubbo作为阿里巴巴开源的高性能...

    02-VIP-Netty核心功能与线程模型精讲1

    总的来说,Netty 是一个强大且灵活的网络通信框架,通过其高效的线程模型、易于使用的 API 和丰富的功能,极大地降低了开发网络应用的复杂性,提高了系统的性能和可扩展性。无论是在微服务架构、游戏后端,还是...

    dubbo源码分析系列

    - Netty通信框架:Dubbo如何利用Netty实现高效的网络通信,包括NIO模型、线程模型和缓冲区管理。 3. **服务暴露与引用** - 服务提供者暴露:分析服务提供者如何启动、暴露服务,包括服务配置、服务发布和注册的...

    dubbo2.8.4.jar

    其次,Dubbo采用了多线程模型和线程池管理,避免了线程创建销毁的性能损耗。此外,Netty的异步非阻塞I/O模型也极大地提升了并发处理能力。 四、服务配置与管理 Dubbo提供了丰富的配置选项,包括服务版本、分组、...

    dubbo-用户指南.pdf

    - 线程模型:涉及到 Dubbo 如何处理并发请求,包括其采用的线程模型。 - 参数验证、结果缓存:确保了数据传输的正确性和性能的优化。 - 泛化引用、泛化实现:允许不同服务之间的通用通信,增加了 Dubbo 的互操作性。...

    Dubbo培训与实战

    1. **远程通讯(Remote Communication)**:Dubbo提供了对多种基于长连接的NIO框架的抽象封装,支持多种线程模型、序列化方式以及“请求-响应”模式的信息交换方式。 2. **集群容错(Cluster Fault Tolerance)**...

    SpringMVC整合dubbo和zookeeper详细教程

    * 远程通讯:提供对多种基于长连接的 NIO 框架抽象封装,包括多种线程模型、序列化、请求-响应模式的信息交换方式。 * 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持、软负载均衡、失败容错、地址...

    Dubbo无法创建新线程异常解决方案.docx

    - `threadpool="fixed"`:采用固定大小的线程池模型,即启动时会初始化一定数量的线程,并保持这些线程一直运行。 - `threads="500"`:线程池中的线程数量为500。 - `accepts="1000"`:限制服务器端可接受的最大连接...

    dubbo开发者文档

    - **线程模型**: 了解Dubbo的线程模型对于理解其性能影响至关重要。 - **直连提供者、只订阅只注册、静态服务**: 这些高级特性允许开发者进行更灵活的配置和控制,以适应复杂的服务治理需求。 - **多协议、多注册...

    Dubbo基本原理机制

    Dubbo 的异步通信机制是基于 Apache MINA 框架的 Reactor 模型通信框架,使用单一长连接和 NIO 异步通讯,适合小数据量大并发的服务调用。 下面是 Dubbo 的基本原理机制的详细说明: 客户端调用远程接口 1. ...

    dubbo教程demo代码

    远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败...

    dubbo-master.zip

    远程调用过程中,Dubbo采用了线程池模型,有效地减少了线程创建销毁的开销,提高了系统性能。 三、服务治理 服务治理是Dubbo的一大特色,包括服务的注册、发现、路由、负载均衡、容错、限流、熔断等策略。例如,...

    dubbo-user-book

    - **线程模型**:Dubbo的线程模型包括IO线程和业务线程,合理使用线程池有助于提高性能。 - **直连提供者**:在特殊情况下,服务消费者可以直接引用服务提供者的地址,绕过注册中心进行调用。 - **服务分组与版本...

    dubbo中文文档说明

    - **线程模型**:如何配置线程池模型以适应不同的应用场景。 - **直连提供者**:绕过注册中心直接调用服务提供者的方式。 - **只订阅/只注册**:在某些场景下,客户端可能只需要订阅服务或注册服务而不执行调用。 - ...

    dubbo用户指南

    - 线程模型:配置服务提供者的线程模型。 - 直连提供者、只订阅、只注册、静态服务等高级配置选项。 - 多协议、多注册中心、服务分组、多版本等功能,使得服务配置更加灵活。 ### Dubbo API参考手册 1. **服务...

    dubbo-2.6.2.jar

    1、远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式; 2、集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,...

    dubbo最佳教程pdf20181119版本

    示例章节则提供了各种典型的应用场景,例如启动时检查、集群容错、负载均衡、线程模型、直连提供者等,这些都是在实际开发过程中经常会用到的配置项,通过具体的实例来指导开发者配置相应的功能。 在API参考手册...

Global site tag (gtag.js) - Google Analytics