`
woodding2008
  • 浏览: 289550 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Storm Worker进程挂起导致漂移

 
阅读更多

 

storm任务的worker漂移【worker重新分配】通常因为OOM、过长的FullGC以及zookeeper负载过高等原因会导致worker中的executor心跳信息无法更新到zookeeper时发生,这个场景与上面描述的不同,属于操作系统内核Bug导致。

 

问题描述

  • dataVVCount 6月份4-6号发生了3次worker飘移,最近一次是port=5723的worker发生飘移。
  • 飘移的worker都发生在a01/a02两台机器

环境检查

  • a01/a02操作系统Centos6.6,内核2.6.32-302.el6.x86_64【与其他机器不一致】
  • 通过storm平台的监控发现,飘移时段宿主机&整个集群的负载比较低. 

任务检查

  • worker日志中没有发现任何与zk通讯错误的日志。
  • worker进程监控指标没有明显波动。

 

worker飘移流程

  • nimbus 判定executor不存活 [(当前时间 - 最后的心跳时间[2秒更新]) > nimbus.task.timeout.secs=30] 
  • Nimbus任务做executor重新分配 
  • supervisor关闭原worker[port=5723] 
  • 新worker启动

初步结论

根据以上得到的信息没有什么太有价值的信息,仍然在迷茫中。

 

zookeeper & storm日志

 
分析得知5723 worker使用的sessionId为:0x353df7b6a55026f
建立连接
2016-06-04 13:45:06,529 [myid:3] - INFO [CommitProcessor:3:ZooKeeperServer@595] - Established session 0x353df7b6a55026f with negotiated timeout 40000 for client /10.x.x.18:55783
 
 
连接断开
2016-06-06 06:22:13,626 [myid:3] - WARN [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@354] - Exception causing close of session 0x353df7b6a55026f due to java.io.IOException: Connection reset by peer 
2016-06-06 06:22:13,628 [myid:3] - INFO [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1001] - Closed socket connection for client /10.x.x.18:55783 which had sessionid 0x353df7b6a55026f 
 
 
session超时被剔除【发生在另外一台zk】
2016-06-06 06:22:16,000 [myid:2] - INFO [SessionTracker:ZooKeeperServer@325] - Expiring session 0x353df7b6a55026f, timeout of 40000ms exceeded 
2016-06-06 06:22:16,001 [myid:2] - INFO [ProcessThread(sid:2 cport:-1)::PrepRequestProcessor@476] - Processed session termination for sessionid: 0x353df7b6a55026f 
 
 
nimbus判定Executor死掉
2016-06-06 06:22:10 b.s.d.nimbus [INFO] Executor dataVVCount-214-1464683013:[544 544] not alive 
2016-06-06 06:22:10 b.s.s.EvenScheduler [INFO] Available slots: ([“8033393c-e639-41a5-a565-066e6bd1748b” 5724]….. 
2016-06-06 06:22:10 b.s.d.nimbus [INFO] Reassigning dataVVCcount-214-1464683013 to 20 slots 
 
 
supervisor关闭worker
2016-06-06 06:22:12 b.s.d.supervisor [INFO] Shutting down and clearing state for id 8277aca4-aa83-4a66-b59c-80db17da807e. 
2016-06-06 06:22:12 b.s.d.supervisor [INFO] Shutting down 8033393c-e639-41a5-a565-066e6bd1748b:8277aca4-aa83-4a66-b59c-80db17da807e 
2016-06-06 06:22:13 b.s.d.supervisor [INFO] Shut down 8033393c-e639-41a5-a565-066e6bd1748b:8277aca4-aa83-4a66-b59c-80db17da807e 
 

 

日志分析

  • zookeeper断开连接发生在worker漂移之后【06:22:16剔除session,06:22:12关闭worker】
  • worker飘移之前与zkServer的连接没有断开【worker日志中没有任何与zookeepr的错误信息】

最终结论

worker运行过程中executor正常情况下不会被判定not alive,肯定是由于某种原因executor不发心跳包给zookeeper了,基于之前遇到过java进程挂起的情况,大胆猜测这个worker进程意外挂起了,果断升级内核版本从Centos6.6 2.6.32-504.el6.x86_6升至较高版本【2.6.32-573.el6.x86_64】,经过3-4个月的观察实践证明,worker没有再发生漂移,说明当时的问题的确由于内核Bug导致。

 

 

内核挂起bug

Tene是对该缺陷的描述如下:

“这个内核漏洞的影响非常简单:在一些看似不可能的情况下,用户进程会死锁并被挂起。任何一个futex调用等待(即使被正确地唤醒)都有可能永远被阻止执行。就像Java里的Thread.park() 可能会一直阻塞那样,等等。如果足够幸运,你会在dmesg日志中发现soft lockup消息;如果没那么幸运(比如跟我们这样),你将不得不花几个月的人工成本去排查代码中的问题,还有可能一无所获。”

http://www.infoq.com/cn/news/2015/06/redhat-futex

 
 
 
 
 
分享到:
评论

相关推荐

    nginx worker进程循环的实现

    在这个过程中,worker进程也是需要与master进程交互的,更有甚者,worker进程作为一个子进程,也是可以接收命令行指令(比如kill等)以进行相应逻辑的处理的。那么worker进程是如何与master或者命令行指令进行交互的...

    windows modules installer worker是什么进程.docx

    Windows Modules Installer Worker 进程详解 Windows Modules Installer Worker 是什么进程?这是许多 Windows 用户都曾经问过的问题。事实上,这个进程不是病毒,而是一个 WINDOWS 系统进程。那么,让我们来简单地...

    Storm 源码分析

    - **Worker**:Worker进程是真正执行计算任务的部分,每个Worker进程都运行一部分Topology实例。Worker内部通过多线程机制实现并发处理。 - **Executor**:Executor是在Worker内部执行Spout或Bolt的线程,每个...

    windows modules installer worker是什么.docx

    禁用 Windows Modules Installer Worker 进程可能会导致系统不稳定和不安全,因此不建议朋友禁用该进程。相反,应该让该进程正常运行,以确保系统的稳定和安全。 Windows Modules Installer Worker 进程是一个非常...

    Storm源码走读笔记

    本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...

    细细品味Storm_Storm简介及安装

    - **Supervisor**:运行在每个工作节点上的守护进程,负责监听分配的任务,并启动和管理Worker进程。 - **Zookeeper**:用于协调集群中各个节点的状态,如选举Nimbus、监控Worker的健康状态等。 - **Worker**:每个...

    STORM学习文档

    Storm 的架构主要由四个组件组成:Nimbus、Supervisor、Worker 和 Zookeeper。 * Nimbus:负责接收用户提交的 topology,并将其分配给 Supervisor。 * Supervisor:负责管理多个 Worker,监控 Worker 的状态,并将...

    Twitter storm

    例如,如果某个worker进程失败,Nimbus会重新启动该进程,并将未完成的任务重定向到新的worker进程上。 - **可扩展性**:Storm设计为高度可扩展的系统,能够随着数据量的增长而线性扩展。这得益于其分布式架构和动态...

    storm集群部署和配置过程详解

    - **supervisor.slots.ports**:定义worker进程可以使用的端口列表,决定了每台worker机器可运行的worker进程数量。例如,`[6700, 6701, 6702, 6703]`表示最多可运行4个worker进程。 5. **启动后台进程**: 最后...

    NGINX开发从入门到精通

    master进程负责管理worker进程,包括接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态。当worker进程退出时,master进程会自动重新启动新的worker进程。worker进程则负责处理基本的网络事件。...

    storm实时数据处理

    Storm的核心组件包括:Nimbus(主控节点)、Supervisor(工作节点)、Worker进程以及Spout和Bolt。Nimbus负责任务调度,Supervisor管理worker进程,而worker则执行实际的计算任务。Spout是数据源,负责生成数据流;...

    apache-storm-2.4.0.tar.gz

    描述中的 "帮助不能下载的同学下载storm安装包" 表明这个文件是为那些无法正常下载 Apache Storm 的人提供的,可能是因为网络问题或其他原因导致的下载失败。 在标签中,"storm 安装包" 暗示了这个文件的用途,即它...

    storm实时计算

    5. **Slots**:表示系统总的进程数量,每个Slot可以运行一个Worker进程。 6. **Nimbus与Supervisors**:通过Zookeeper集群进行交互和协调。Nimbus和Supervisors本身是无状态的,所有的状态信息都保存在Zookeeper或...

    storm入门 PDF 下载

    1. **Storm架构**:Storm的核心组件包括nimbus(主控节点)、supervisor(工作节点)、worker进程、spout(数据源)和bolt(处理逻辑)。Nimbus负责任务调度,Supervisor管理worker进程,worker运行spout和bolt实例...

    GatewayWorker源码包

    GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给BusinessWorker进程处理,BusinessWorker进程负责处理实际的业务逻辑(默认调用Events.php处理业务),并将...

    storm原理分析

    2. **Supervisor**:运行在工作节点上的守护进程,负责监听 Nimbus 分配的任务,并启动和关闭 Worker 进程。 3. **Worker**:运行在 Supervisor 上的 Java 进程,用于执行具体的任务。每个 Worker 可以包含多个 ...

    Storm笔记-PPT

    3. **Worker**:实际执行计算任务的进程,每个worker包含多个task。 4. **Spout**:数据源,负责从外部数据源拉取数据并生成数据流。 5. **Bolt**:数据处理组件,可以进行过滤、转换、聚合等操作。 **四、Storm...

Global site tag (gtag.js) - Google Analytics