分析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策略,如何申请消费序列大于当前发布到的序列,则等待新的消息发布,也就是说生产者没有消息发布,有两种可能原因导致:一消费者太快,二生产者根本没有消息过来,所以一直阻塞
相关文章推荐
- Lambda表达式和闭包Closure
- 深入认识Hibernate
- Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM
- JavaScript对象
- 类学习之Use Base keyword to call method in parent class from subclass
- cocopods install或update 安装或更新第三方库时,报The ... target overrides the 'OTHER_LDFLAGS' build setting....
- UFLDL教程笔记及练习答案五(自编码线性解码器与处理大型图像**卷积与池化)
- Java内存模型与volatile关键字
- 链表反转的四种方法分析
- 虚拟切割缝合技术学习--VR
- 使用Gson混淆遇到的NullPointException
- [BZOJ 1083] [SCOI2005] 繁忙的都市
- LeetCode_27---Remove Element
- [case分享]Exchange 2013登陆OWA失败出现The Active Directory user wasn't found
- 【一些事晚报】一个平庸程序员自白
- Eclilpse Plugin for Velocity on Luna
- Android Eclipse 环境搭建
- Mike and Feet(CF 547B)
- 黑客帝国代码雨
- 实验五 Java网络编程及安全