worker进程发生死锁[0.9.5]
在0.9.5版本的storm发现netty通信过程中出现死锁,只发现过一次,发生频率较低。
死锁栈信息
Found one Java-level deadlock: ============================= "Thread-12-disruptor-worker-transfer-queue": waiting to lock monitor 0x00007f85e000aee8 (object 0x00000007b4ffc8e8, a java.lang.Object), which is held by "client-worker-3" "client-worker-3": waiting to lock monitor 0x00007f85dc021ef8 (object 0x000000079d717418, a backtype.storm.messaging.netty.Client), which is held by "Thread-12-disruptor-worker-transfer-queue" "Thread-12-disruptor-worker-transfer-queue" prio=10 tid=0x00007f8750cb9000 nid=0x8a3 waiting for monitor entry [0x00007f86627e6000] java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:398) - waiting to lock <0x00000007b4ffc8e8> (a java.lang.Object) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.writeFromUserCode(AbstractNioWorker.java:128) at org.apache.storm.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:84) at org.apache.storm.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendDownstream(DefaultChannelPipeline.java:779) at org.apache.storm.netty.channel.Channels.write(Channels.java:725) at org.apache.storm.netty.handler.codec.oneone.OneToOneEncoder.doEncode(OneToOneEncoder.java:71) at org.apache.storm.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:59) at org.apache.storm.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:591) at org.apache.storm.netty.channel.DefaultChannelPipeline.sendDownstream(DefaultChannelPipeline.java:582) at org.apache.storm.netty.channel.Channels.write(Channels.java:704) at org.apache.storm.netty.channel.Channels.write(Channels.java:671) at org.apache.storm.netty.channel.AbstractChannel.write(AbstractChannel.java:248) at backtype.storm.messaging.netty.Client.flushMessages(Client.java:480) - locked <0x000000079d717418> (a backtype.storm.messaging.netty.Client) at backtype.storm.messaging.netty.Client.send(Client.java:400) - locked <0x000000079d717418> (a backtype.storm.messaging.netty.Client) at backtype.storm.utils.TransferDrainer.send(TransferDrainer.java:54) at backtype.storm.daemon.worker$mk_transfer_tuples_handler$fn__6940$fn__6941.invoke(worker.clj:336) at backtype.storm.daemon.worker$mk_transfer_tuples_handler$fn__6940.invoke(worker.clj:334) at backtype.storm.disruptor$clojure_handler$reify__1605.onEvent(disruptor.clj:58) at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:125) at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:99) at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80) at backtype.storm.disruptor$consume_loop_STAR_$fn__1618.invoke(disruptor.clj:94) at backtype.storm.util$async_loop$fn__459.invoke(util.clj:463) at clojure.lang.AFn.run(AFn.java:24) at java.lang.Thread.run(Thread.java:745) "client-worker-3" prio=10 tid=0x00007f8750d36800 nid=0x813 waiting for monitor entry [0x00007f86d0d65000] java.lang.Thread.State: BLOCKED (on object monitor) at backtype.storm.messaging.netty.Client.closeChannelAndReconnect(Client.java:501) - waiting to lock <0x000000079d717418> (a backtype.storm.messaging.netty.Client) at backtype.storm.messaging.netty.Client.access$1400(Client.java:78) at backtype.storm.messaging.netty.Client$3.operationComplete(Client.java:492) at org.apache.storm.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) at org.apache.storm.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:413) at org.apache.storm.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:380) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.cleanUpWriteBuffer(AbstractNioWorker.java:417) - locked <0x00000007b4ffc8e8> (a java.lang.Object) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:373) at org.apache.storm.netty.channel.socket.nio.NioWorker.read(NioWorker.java:93) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) at org.apache.storm.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) at org.apache.storm.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) at org.apache.storm.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) at org.apache.storm.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) at org.apache.storm.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)
解决办法
升级storm版本至0.9.6或者更高版本。
https://issues.apache.org/jira/browse/STORM-839
相关推荐
在这个过程中,worker进程也是需要与master进程交互的,更有甚者,worker进程作为一个子进程,也是可以接收命令行指令(比如kill等)以进行相应逻辑的处理的。那么worker进程是如何与master或者命令行指令进行交互的...
这个是因为系统在安装一些系统模块,或者 Windows Update 正在自动下载安装安全更新,或者当一个更新安装失败时,Windows Modules Installer Worker 会不断访问硬盘驱动器,造成硬盘占用 100% 的情况发生。...
- **Worker**:Worker进程是真正执行计算任务的部分,每个Worker进程都运行一部分Topology实例。Worker内部通过多线程机制实现并发处理。 - **Executor**:Executor是在Worker内部执行Spout或Bolt的线程,每个...
master进程负责管理worker进程,包括接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态。当worker进程退出时,master进程会自动重新启动新的worker进程。worker进程则负责处理基本的网络事件。...
本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...
- **supervisor.slots.ports**:定义worker进程可以使用的端口列表,决定了每台worker机器可运行的worker进程数量。例如,`[6700, 6701, 6702, 6703]`表示最多可运行4个worker进程。 5. **启动后台进程**: 最后...
Storm 的架构主要由四个组件组成:Nimbus、Supervisor、Worker 和 Zookeeper。 * Nimbus:负责接收用户提交的 topology,并将其分配给 Supervisor。 * Supervisor:负责管理多个 Worker,监控 Worker 的状态,并将...
- **Supervisor**:运行在每个工作节点上的守护进程,负责监听分配的任务,并启动和管理Worker进程。 - **Zookeeper**:用于协调集群中各个节点的状态,如选举Nimbus、监控Worker的健康状态等。 - **Worker**:每个...
例如,如果某个worker进程失败,Nimbus会重新启动该进程,并将未完成的任务重定向到新的worker进程上。 - **可扩展性**:Storm设计为高度可扩展的系统,能够随着数据量的增长而线性扩展。这得益于其分布式架构和动态...
Windows Modules Installer Worker 进程详解 Windows Modules Installer Worker 是一个系统后台进程,文件名称为 tiworker,是微软 Windows 操作系统的一部分。该进程主要用于 Windows Update(自动更新),用于...
5. **Slots**:表示系统总的进程数量,每个Slot可以运行一个Worker进程。 6. **Nimbus与Supervisors**:通过Zookeeper集群进行交互和协调。Nimbus和Supervisors本身是无状态的,所有的状态信息都保存在Zookeeper或...
2. **Supervisor**:运行在工作节点上的守护进程,负责监听 Nimbus 分配的任务,并启动和关闭 Worker 进程。 3. **Worker**:运行在 Supervisor 上的 Java 进程,用于执行具体的任务。每个 Worker 可以包含多个 ...
Storm的核心组件包括:Nimbus(主控节点)、Supervisor(工作节点)、Worker进程以及Spout和Bolt。Nimbus负责任务调度,Supervisor管理worker进程,而worker则执行实际的计算任务。Spout是数据源,负责生成数据流;...
GatewayWorker使用经典的Gateway和Worker进程模型。Gateway进程负责维持客户端连接,并转发客户端的数据给BusinessWorker进程处理,BusinessWorker进程负责处理实际的业务逻辑(默认调用Events.php处理业务),并将...
1. **Storm架构**:Storm的核心组件包括nimbus(主控节点)、supervisor(工作节点)、worker进程、spout(数据源)和bolt(处理逻辑)。Nimbus负责任务调度,Supervisor管理worker进程,worker运行spout和bolt实例...
在这种模式下,master进程主要负责管理和调度worker进程,而worker进程则执行具体的任务。下面将详细介绍如何使用PHP实现这种模式以及其工作原理。 首先,我们看代码中的`Worker`类。这个类包含了运行master进程和...
master进程为主进程,启动过程中读取conf配置,根据每个应用配置中的ip和端口创建监听socket,然后再根据配置中的进程数创建对应数量的子进程即worker进程,worker进程会自动继承master进程创建的监听socket,使得...