您的位置:首页 > 其它

分析storm各个线程堵塞原因

2015-06-11 22:01 281 查看


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策略,如何申请消费序列大于当前发布到的序列,则等待新的消息发布,也就是说生产者没有消息发布,有两种可能原因导致:一消费者太快,二生产者根本没有消息过来,所以一直阻塞
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: