最近系统出现一个问题,少量Proxy出现故障,群组消息应用服务器会出现内存资源不够导致的崩溃的情况。我们对每个worker做了过载的保护,并且对每个worker的内存使用做了限制。从抓下来的dump来看,内存中的sipc对象占用了过多内存导致的崩溃。sipc请求对象在内存中的数量远远超过设置的数量,说明过载没有起到作用。
现场描述:
群消息服务器会访问多台Proxy给同的用户下行消息。
坏了两台proxy。
群组消息应用worker与zookeeper断掉连接,没有任何请求过来从proxy过来。内存占用设定的2.4G,每颗cpu在20%左右,正常地对进程抓dump抓不下来,得加-F参数。kill进程的操作,需要一段时间后,进程才会消失。
事故原因分析:
SipcHost在做过载保护的机制是这样的:
Sipc请求进来的时候,计数器加1,Sipc应答的时候,计数器减1;
计数器如果到达阈值,对于新请求,直接返回server busy;
但是目前上线的很多应答无内容的应用为了快速响应客户端的请求,都是直接发送应答之后再开始做业务逻辑,群消息就是个典型的例子,先给客户端reponse,再做群消息的分发。
SipcHost的线程池使用的是 java.util.concurrent.Executors.newFixedThreadPool(int nThreads),而这个线程池使用的是无容量限制的LinkedBlockingQueue。
基于以上三点,群消息在做消息分发的时候由于proxy的问题RPC消息发不下去,进入RPC重试机制;由于群消息快速reponse了,所以群消息的Sipc计数器一直为一个比较小的值,群消息的请求一直会进入到SipcHost的Queue中,最终导致内存被使用完毕,所有的线程被hang死。
经验总结:
尽量不要使用计数器做过载保护,因为计数器由于应用多使用异步的原因,不能准确判断事务是否完成,只能根据应用的response来计数,不是很准确。建议使用有一定容量的queue的线程池,queue满了直接报busy来做过载保护。
分享到:
相关推荐
在这一领域,有四个核心知识点至关重要:透明性的实现、远程过程调用(RPC)的调用语义和实现问题、负载平衡算法以及事务的并发控制。以下是对这些知识点的详细探讨。 首先,透明性在分布式操作系统中的实现是确保...
Sentinel是阿里开源的流量控制组件,用于保护系统免受过载影响。在微服务架构中,Sentinel可以实现流控策略(如线程数限流、RT限流、异常比例限流等)、熔断降级以及系统自适应保护。我们需要在服务中引入Sentinel...
Springcloud Alibaba是阿里巴巴提供的一个全面的微服务解决方案,它集成了众多优秀的开源项目,如Nacos(服务注册与发现)、Sentinel(流量控制与熔断)、Dubbo(高性能RPC框架)、Seata(分布式事务处理)等,构建...
3. **负载迁移**:当某些节点过载时,将部分负载转移到较为空闲的节点上。 #### 影响动态平衡算法效率的因素 - **负载变化的速度**:如果负载变化迅速,则需要更频繁地调整。 - **负载预测的准确性**:准确预测未来...
总结,58到家的分布式服务框架是基于微服务理念设计的,采用了服务注册与发现、服务治理、RPC框架、分布式事务、消息队列等多种技术手段,构建了一个高度可扩展、高可用的系统架构。这套框架不仅保证了服务的质量,...
例如,Nacos可以用来做服务发现,Sentinel则可以保护系统免受过载的影响,Seata解决分布式事务难题,而Dubbo则负责服务间的通信。通过Spring Cloud Gateway,我们可以统一处理所有对外的请求,实现API的统一管理。...
Sentinel能够帮助系统抵御过载流量,保障服务稳定性。 4. **Seata**:全分布式事务解决方案,解决了在分布式环境下事务的一致性问题。Seata支持AT、TCC等多种事务模式,使得分布式事务的处理变得简单。 5. **...
它可以帮助开发者保护系统免受过载的影响,确保服务的稳定性。Sentinel提供了丰富的流量控制策略,如固定窗口、滑动窗口、漏桶、令牌桶等,并支持动态规则调整。 3. **Dubbo**:作为经典的RPC框架,Dubbo在Spring ...
3. **Sentinel流量控制**:Sentinel是阿里开源的流量控制组件,它提供了一种动态流量控制的机制,以保护系统免受过载影响。教程将教授如何在物流系统中设置Sentinel规则,实现熔断、降级和限流策略。 4. **Seata...
Sentinel则负责保护各个服务的稳定,防止过载;Seata保证跨服务的事务一致性;而RocketMQ则可以用来处理异步任务,如发送通知、处理后台数据统计等。 微服务Spring Cloud Alibaba的实施,不仅简化了开发流程,还...
- 熔断:当服务因过载导致响应缓慢或无法响应时,暂时停止调用,防止整个系统的连锁故障。 - 服务降级:在高负载情况下,牺牲非核心功能以保证核心服务的稳定运行。 11. **微服务的优缺点**: - 优点:模块化...
SpringCloudAlibaba提供了诸如Nacos(服务发现与配置管理)、Dubbo(高性能RPC框架)、Sentinel(流量控制与熔断降级)、Seata(分布式事务解决方案)等一系列微服务治理工具。这些组件共同构建了一个完整的微服务...
它能确保请求均匀地分布到各个服务实例,避免某一个实例过载。书中可能讨论了轮询、随机、最少连接数等负载均衡算法,以及如何在服务框架中实现这些策略。 容错处理是分布式系统必不可少的部分,包括熔断、降级和...
在高并发场景下,Sentinel可以帮助系统保护关键资源,防止过载导致服务崩溃。 3. **Seata**:用于分布式事务处理,Seata实现了AT、TCC、Saga、XA等事务模式,解决了微服务架构下的分布式事务难题,保证了业务数据的...
2. 服务治理:采用服务注册、订阅机制,统一的RPC框架,分布式调用链跟踪,全局超时控制,过载保护,以及柔性服务和依赖降级策略,以应对高并发挑战。 四、服务治理的详细机制 1. 服务注册与订阅:服务提供者向注册...
2. **服务限流与降级**:利用 Sentinel 实现对服务的流量控制,防止系统过载。 3. **配置管理**:Nacos 提供了强大的动态配置管理能力,可以实时更新配置而不重启服务。 4. **消息驱动**:集成 RocketMQ 进行消息...
3. **Sentinel**:Sentinel是针对分布式系统的流量控制、熔断和降级的工具,它可以保护系统免受过载的影响,确保服务的稳定性和可用性。在C2C电商系统中,Sentinel可以用于控制关键服务的流量,避免雪崩效应。 4. *...
- 加密与隐私保护:保护数据免受未经授权的访问。 以上这些知识点可能会出现在“分布式系统概念与设计”的练习题中,通过解答这些题目,可以加深对分布式系统设计的理解和应用能力。在实际的学习过程中,应注重...
7. **分布式事务**:在分布式环境中,保证事务的一致性是挑战之一。2PC(二阶段提交)、TCC(Try-Confirm-Cancel)、Saga和最终一致性等是常见的解决方案。 8. **容错机制**:系统设计需要考虑到异常情况,例如网络...
过载保护设计 协议设计 二进制协议 文本协议 接入层架构设计 DNS轮询 动静态分离 静态化 反向代理 LVS F5 CDN 逻辑层架构设计 连接池 串行化技术 影子Master架构 批量写入 配置中心 去中心化 ...