dubbo通过配置threadpool来配置线程池的类型:
fixed 固定大小线程池,启动时建立线程,不关闭,一直持有(缺省)
cached 缓存线程池,空闲一分钟自动删除,需要时重建
limited 可伸缩线程池,但池中的线程数只会增长不会收缩(为避免收缩时突然来了大流量引起的性能问题)
默认是固定大小线程池,如果服务消费者太多时会出现等待,甚至超时:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer. start time : 2016-04-22 10:36:58.471, end time : 2016-04-22 10:37:18.535, client elapsed: 342 ms, server elapsed: 19722 ms, timeout: 20000 ms, request: Request [ id =178, version=2.0.0, twoway= true , event= false , broken= false , data=RpcInvocation [methodName= install , parameterTypes=[class com.acgist.Demo, class java.lang.String], arguments=[com.acgist.Demo@7fe5c339, ], attachments={path=com.acgist.IDemo, interface=com.acgist.IDemo, timeout=20000, version=0.0.0}]], channel: /169 .254.183.37:60024 -> /169 .254.183.37:20882
at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:188)
at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:110)
at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get(DefaultFuture.java:84)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:96)
at com.alibaba.dubbo.rpc.protocol.AbstractInvoker.invoke(AbstractInvoker.java:144)
at com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:74)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:53)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:48)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:77)
... 5 more
|
服务端提示繁忙:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
com.alibaba.dubbo.remoting.ExecutionException: class com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler error when process caught event . at com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler.caught(AllChannelHandler.java:67)
at com.alibaba.dubbo.remoting.transport.AbstractChannelHandlerDelegate.caught(AbstractChannelHandlerDelegate.java:44)
at com.alibaba.dubbo.remoting.transport.AbstractChannelHandlerDelegate.caught(AbstractChannelHandlerDelegate.java:44)
at com.alibaba.dubbo.remoting.transport.AbstractPeer.caught(AbstractPeer.java:127)
at com.alibaba.dubbo.remoting.transport.netty.NettyHandler.exceptionCaught(NettyHandler.java:112)
at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.exceptionCaught(NettyCodecAdapter.java:165)
at org.jboss.netty.channel.Channels.fireExceptionCaught(Channels.java:432)
at org.jboss.netty.channel.AbstractChannelSink.exceptionCaught(AbstractChannelSink.java:52)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302)
at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:148)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261)
at org.jboss.netty.channel.socket.nio.NioWorker. read (NioWorker.java:349)
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:280)
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:200)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.util.concurrent.RejectedExecutionException: Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-169.254.183.37:20882, Pool Size: 200 (active: 200, core: 200, max: 200, largest: 200), Task: 1108 (completed: 908), Executor status:(isShutdown: false , isTerminated: false , isTerminating: false ), in dubbo: //169 .254.183.37:20882!
at com.alibaba.dubbo.common.threadpool.support.AbortPolicyWithReport.rejectedExecution(AbortPolicyWithReport.java:53)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:768)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:656)
at com.alibaba.dubbo.remoting.transport.dispatcher.all.AllChannelHandler.caught(AllChannelHandler.java:65)
... 17 more
|
这时可以两种选择,增加线程的数量或者修改线程池为缓存线程池。不过我推荐第二种。
http://www.acgist.com/article/348.html
相关推荐
### Dubbo监控系统配置详解 #### 一、Dubbo监控系统概述 Dubbo是一款高性能、轻量级的开源服务框架,旨在提供高性能和透明...同时,随着业务的发展和技术的进步,不断优化和调整Dubbo监控系统的配置也是必不可少的。
10. `<dubbo:filter>` 和 `<dubbo:executor>`:分别用于添加服务过滤器和定制线程池,增强服务行为。 了解这些知识点后,开发者可以根据实际需求,通过XML配置文件灵活地调整和优化Dubbo服务的运行行为。正确理解和...
理解这些配置有助于我们精准控制服务的行为,例如设置服务的超时时间、重试次数、线程池大小等,从而优化系统的性能和稳定性。 在实际操作中,我们常常需要参考“dubbo培训PPT”,如`Dubbo培训与实战.pptx`,它通常...
【标题】:“Dubbo异步调用的优化共20页.pdf” 【描述】:这份文档详细探讨了在分布式服务框架Dubbo中如何进行异步调用的优化,旨在提高系统的响应速度和并发处理能力。它涵盖了从基础概念到实战技巧的多个层面,...
- **并发模型**:合理设置线程池大小以平衡资源利用率和响应时间。 - **服务拆分与模块化**:遵循微服务架构原则,合理拆分服务并实现模块化部署。 #### 六、案例分析与实战经验分享 - **实际项目中Dubbo的应用...
要解决Thread pool is EXHAUSTED错误,需要从两个方面入手:一是调整dubbo服务端线程池的配置,二是优化服务端的性能。 首先,我们可以调整dubbo服务端线程池的配置,例如增加线程池的大小、调整线程池的类型等。...
`dubbo.xsd`定义了`protocol`元素,允许设置端口、线程池大小等参数,以优化服务通信。 5. **其他配置**: `dubbo.xsd`还涵盖了其他关键配置,如`monitor`(监控中心)、`metrics`(度量指标)等,确保服务的可...
4. **调用统计**:展示服务调用的统计信息,如调用次数、成功率、平均耗时等,帮助优化服务性能。 5. **调用链跟踪**:通过分布式追踪,呈现服务间的调用关系和调用路径,有助于定位问题和理解系统整体运行情况。 ...
1. **服务提供者(Provider)配置**:在`<dubbo:provider>`元素中,你可以指定服务提供者的元数据,包括接口名、版本、应用名、执行超时时间、线程池大小等。这些配置有助于在服务暴露时进行参数调整,确保服务的...
8. **配置管理**: 用户可以通过 dubbo-admin 修改服务的配置,例如重试次数、超时时间、线程池大小等,动态调整服务行为。 总结,Dubbo-admin 是 Dubbo 生态系统中的重要组件,它提供了一个方便的界面来管理和服务...
【Dubbo约束XSD配置文件】是Dubbo框架中用于定义服务配置的规范性文档,它使用XML Schema Definition (XSD)语言编写,为Dubbo的XML配置...在实际开发中,正确引用并理解XSD文件对于优化Dubbo服务的部署和管理至关重要。
在高并发场景下,Dubbo提供了多种策略来优化性能和稳定性,如线程池管理、连接池优化、异步调用、批量请求等。同时,Dubbo支持动态调整服务的QPS阈值,以防止服务雪崩。 4. **服务层设计技术**: Dubbo鼓励采用...
在消费者调用多个服务提供者时,Dubbo提供了多种负载均衡策略,如轮询、随机、最少活跃调用数等,以优化服务请求的分布,减少单个服务提供者的压力。 4. **服务治理**: Dubbo提供服务治理功能,包括服务的元数据...
解决方法包括增大服务端的`dubbo.provider.threads`参数,减小消费者端的`dubbo.consumer.actives`参数,增加服务提供者的数量,或优化服务方法的参数以降低线程消耗。 4. **Hessian序列化失败:...
1. **性能优化**:通过监控数据,可以分析服务瓶颈,调整服务配置,如增大线程池大小,优化网络通信等。 2. **故障排查**:当服务出现问题时,Monitor提供的调用链信息可以帮助定位问题所在,是排查故障的重要工具...
3. **ProtocolConfig**: 指定服务提供的协议,如 dubbo、http、hessian 等,以及相关属性,如端口、线程池大小等。 4. **ServiceConfig**: 用于暴露服务,定义服务元数据,包括接口、版本、实现类等。一个服务可以...
- **参数调优**:调整Dubbo的超时时间、连接池大小、线程池配置等,以适应不同场景的需求。 - **服务治理**:通过服务限流、熔断、降级等机制,保障系统在高并发时的稳定性和可用性。 - **数据传输优化**:考虑...
同时,Dubbo支持多种序列化方式,如Hessian2、Fastjson、Java自带的Serializable等,选择合适的序列化方式可以优化通信效率和性能。 7. **负载均衡策略** 当服务消费者有多个可选的服务提供者时,Dubbo内置了多种...
6. 监控与调优:分享Dubbo内置的监控平台Dubbo Monitor,以及如何进行服务性能优化。 7. 实战案例:通过实际的业务场景,展示如何利用Dubbo构建分布式系统。 四、学习路径与进阶指南 1. 理解Dubbo的基本原理:深入...