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

Storm worker进程发生死锁

 
阅读更多

 

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

分享到:
评论

相关推荐

    nginx worker进程循环的实现

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

    windows modules installer worker是什么进程.docx

    这个是因为系统在安装一些系统模块,或者 Windows Update 正在自动下载安装安全更新,或者当一个更新安装失败时,Windows Modules Installer Worker 会不断访问硬盘驱动器,造成硬盘占用 100% 的情况发生。...

    Storm 源码分析

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

    NGINX开发从入门到精通

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

    Storm源码走读笔记

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

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

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

    STORM学习文档

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

    细细品味Storm_Storm简介及安装

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

    Twitter storm

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

    windows modules installer worker是什么.docx

    Windows Modules Installer Worker 进程详解 Windows Modules Installer Worker 是一个系统后台进程,文件名称为 tiworker,是微软 Windows 操作系统的一部分。该进程主要用于 Windows Update(自动更新),用于...

    storm实时计算

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

    storm原理分析

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

    storm实时数据处理

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

    GatewayWorker源码包

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

    storm入门 PDF 下载

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

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

    在这种模式下,master进程主要负责管理和调度worker进程,而worker进程则执行具体的任务。下面将详细介绍如何使用PHP实现这种模式以及其工作原理。 首先,我们看代码中的`Worker`类。这个类包含了运行master进程和...

    Workerman-master.zip

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

Global site tag (gtag.js) - Google Analytics