`
woodding2008
  • 浏览: 285337 次
  • 性别: 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或者命令行指令进行交互的...

    Workerman-master.zip

    master进程为主进程,启动过程中读取conf配置,根据每个应用配置中的ip和端口创建监听socket,然后再根据配置中的进程数创建对应数量的子进程即worker进程,worker进程会自动继承master进程创建的监听socket,使得...

    GatewayWorker源码包

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

    tp5.1+GatewayWorker 修复GatewayWorker在windows启动问题

    命令php think worker:gateway在windows下运行...根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_for_win.bat,启动

    windows modules installer worker是什么进程.docx

    windows modules installer worker是什么进程.docx

    基于Storm的美团实时计算应用实践

    最大问题是系统很脆弱,而且不是容错的:需要自己保证消息队列和worker进程工作正常。 Storm完整地解决了这些问题。它是为分布式场景而生的,抽象了消息传递,会自动地在集群机器上并发地处理流式计算,让你专注于...

    nextjs-worker-example:这是Webpack使用Next.js加载Web Worker的示例

    NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....

    开源调度框架dolphinscheduler,2台机器上运行的任务无法立即停止,另外1台机器运行的任务可以立即停止

    4. 问题定位:打印3台机器的worker进程dump信息,发现215、216机器上,处理停止任务的线程发生了 一直 waiting 状态,找到 5. 解决方案:去掉processUtils.killYarnJob逻辑(hive、spark客户端执行,只需kill 本地...

    Nginx worker_connections配置太低导致500错误案例

    原来是Nginx配置文件中的worker_connections配置太低,只有50,导致与php-fpm交互过程中超出了connections限制,出现了500错误。直接将此参数的值改成10240就解决了此问题。 您可能感兴趣的文章:Nginx中worker ...

    php实现 master-worker 守护多进程模式的实例代码

    主要介绍了php实现 master-worker 守护多进程模式的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下

    Storm入门

    1、worker进程挂掉storm会重新再启动一个worker2、supervisor进程挂掉不会影响之前已经提交的topology,只是后期不会再向这个节点分配任务了。3、nimbus进程挂掉不会影响之前已经提交的topology,只是后期不能再向...

    漫谈大数据第四期-storm

    Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Sprout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream ...

    gif.worker.js

    gif.worker.js js的多张图片转成gif的插件

    线程示例WorkerThread_demo

    线程示例WorkerThread_demo,线程示例WorkerThread_demo, 线程示例WorkerThread_demo,

    Web Worker版调用Face-Api.js

    webworker封装调用face-api.js

    Python实现 多进程导入CSV数据到 MySQL

    生产者和消费者模型,主进程读文件,多个 worker 进程执行插入 注意控制 worker 的数量,避免对 MySQL 造成太大的压力 注意处理脏数据导致的异常 原始数据是 GBK 编码,所以还要注意转换成 UTF-8 用 cli

    vue3中使用Web Worker多线程(JS原味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

    web worker线程

    为什么使用Worker线程? 1、不会阻塞主应用程序,但是fork进程一次只能处理一项任务。如果您有两个任务,一个将花费10秒,另一个将花费1...2、如果一个任务导致了进程崩溃,那么所有发送给同一进程的任务都将无法完成。

    vue3中使用Web Worker多线程(TS风味版)

    用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644

Global site tag (gtag.js) - Google Analytics