分析storm各个线程堵塞原因





1、Thread-4-kafkaSpout-EventThread线程处于长时间等待状态,是正常行为,该线程的作用:
      一开始就进入无限循环,从队列waitingEvents中获取事件,如果没有就阻塞等待
2、Thread-4-kafkaSpout-SendThread,该线程的作用:
     是个IO线程,用于发起和接受请求,并处理相应,同时产生心跳信息
 
3、Thread-4-kafkaSpout,接受kafka的消息的线程,多数处于运行状态,偶尔处于等待状态原因是zk的问题:
"Thread-4-kafkaSpout" - Thread t@65
   java.lang.Thread.State: WAITING
    at java.lang.Object.wait(Native Method)
    - waiting on <27aa1748> (a org.apache.zookeeper.ClientCnxn$Packet)
    at java.lang.Object.wait(Object.java:503)
    at org.apache.zookeeper.ClientCnxn.submitRequest(ClientCnxn.java:1342)
    at org.apache.zookeeper.ZooKeeper.getData(ZooKeeper.java:1153)
    at org.apache.curator.framework.imps.GetDataBuilderImpl$4.call(GetDataBuilderImpl.java:302)
    at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:68)
    at storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:79)
    at storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69)
    at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:134)
 

4、多数业务处理的bolt都是处于阻塞状态,上面只列举两个:
"Thread-8-CleanLogJsErrorBolt" - Thread t@69
   java.lang.Thread.State: TIMED_WAITING
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for <5433050b> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2176)
    at com.lmax.disruptor.BlockingWaitStrategy.waitFor(BlockingWaitStrategy.java:87)
    at com.lmax.disruptor.ProcessingSequenceBarrier.waitFor(ProcessingSequenceBarrier.java:54)
    at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:97)
    at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:80)
    at backtype.storm.daemon.executor$fn__4369$fn__4381$fn__4428.invoke(executor.clj:748)
    at backtype.storm.util$async_loop$fn__464.invoke(util.clj:463)
    at clojure.lang.AFn.run(AFn.java:24)
    at java.lang.Thread.run(Thread.java:745)
disruptor是storm线程通讯的工具,有五种等待策略,storm采用BlockingWaitStrategy策略,如何申请消费序列大于当前发布到的序列,则等待新的消息发布,也就是说生产者没有消息发布,有两种可能原因导致:一消费者太快,二生产者根本没有消息过来,所以一直阻塞


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值