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
相关推荐
在这个过程中,worker进程也是需要与master进程交互的,更有甚者,worker进程作为一个子进程,也是可以接收命令行指令(比如kill等)以进行相应逻辑的处理的。那么worker进程是如何与master或者命令行指令进行交互的...
master进程为主进程,启动过程中读取conf配置,根据每个应用配置中的ip和端口创建监听socket,然后再根据配置中的进程数创建对应数量的子进程即worker进程,worker进程会自动继承master进程创建的监听socket,使得...
GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给BusinessWorker进程处理,BusinessWorker进程负责处理实际的业务逻辑(默认调用Events.php处理业务),并将...
命令php think worker:gateway在windows下运行...根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_for_win.bat,启动
windows modules installer worker是什么进程.docx
最大问题是系统很脆弱,而且不是容错的:需要自己保证消息队列和worker进程工作正常。 Storm完整地解决了这些问题。它是为分布式场景而生的,抽象了消息传递,会自动地在集群机器上并发地处理流式计算,让你专注于...
NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....
4. 问题定位:打印3台机器的worker进程dump信息,发现215、216机器上,处理停止任务的线程发生了 一直 waiting 状态,找到 5. 解决方案:去掉processUtils.killYarnJob逻辑(hive、spark客户端执行,只需kill 本地...
原来是Nginx配置文件中的worker_connections配置太低,只有50,导致与php-fpm交互过程中超出了connections限制,出现了500错误。直接将此参数的值改成10240就解决了此问题。 您可能感兴趣的文章:Nginx中worker ...
主要介绍了php实现 master-worker 守护多进程模式的实例代码,代码简单易懂,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
1、worker进程挂掉storm会重新再启动一个worker2、supervisor进程挂掉不会影响之前已经提交的topology,只是后期不会再向这个节点分配任务了。3、nimbus进程挂掉不会影响之前已经提交的topology,只是后期不能再向...
Storm的术语包括Stream、Spout、Bolt、Task、Worker、Stream Grouping和Topology。Stream是被处理的数据。Sprout是数据源。Bolt处理数据。Task是运行于Spout或Bolt中的 线程。Worker是运行这些线程的进程。Stream ...
gif.worker.js js的多张图片转成gif的插件
线程示例WorkerThread_demo,线程示例WorkerThread_demo, 线程示例WorkerThread_demo,
webworker封装调用face-api.js
生产者和消费者模型,主进程读文件,多个 worker 进程执行插入 注意控制 worker 的数量,避免对 MySQL 造成太大的压力 注意处理脏数据导致的异常 原始数据是 GBK 编码,所以还要注意转换成 UTF-8 用 cli
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
为什么使用Worker线程? 1、不会阻塞主应用程序,但是fork进程一次只能处理一项任务。如果您有两个任务,一个将花费10秒,另一个将花费1...2、如果一个任务导致了进程崩溃,那么所有发送给同一进程的任务都将无法完成。
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644