`

storm worker异常重启原因排查汇总

阅读更多

此时此刻,正在等到6.18的到来,趁着没事写个博客,,,酷

 

storm集群在worker down掉以后会自动启动新的woker,但是有很多情况下是感觉不应该重启的时候,woker重启了,因此就走上了排查woker重启的道路上~

 

一、排查思路

经过排查,主要总结有以下几种问题,会导致woker重启:

1. 代码有未捕获的异常

如下例子,因为处理的数据有异常,并且在代码中没有捕获异常,这样Exception被抛给了JVM,导致woker down掉。

对于这样的异常,可以在storm UI界面看到相应的异常信息,因此,排查问题时,可以首先看UI中是否有异常抛出。

 

java.lang.RuntimeException: java.lang.NumberFormatException: For input string: "赠品"
    at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:90)
    at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:61)
    at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:62)
    at backtype.storm.daemon.executor$fn__3498$fn__3510$fn__3557.invoke(executor.clj:730)
    at backtype.storm.util$async_loop$fn__444.invoke(util.clj:403)
    at clojure.lang.AFn.run(AFn.java:24)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NumberFormatException: For input string: "赠品"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:410)
    at java.lang.Long.parseLong(Long.java:468)
    at com.jd.ad.user.service.impl.UserOrderEntireUpdateServiceImpl.processUserOrderEntireData(UserOrderEntireUpdateServiceImpl.java:96)
    at com.jd.a

 

2、JVM 内存溢出

关于这个问题,没有保留下来当初的现场,主要是由于各种原因导致JVM的垃圾回收机制有问题,最终导致内存溢出,这个问题,也会导致woker退出。

对于此类异常,跟1中的一样,也可以在UI界面中看到的,这个需要具体排查JVM内存溢出的原因。

 

3、woker 无问题,supervisor重启woker

对于1和2中的问题,抛出来的异常信息都可以在UI界面中以及woker的日志文件中查找到,但是,我们还遇到了另一种情况,就是在woker中找不到任何的异常信息,但是总是随机的会有woker重启。

 

因为woker中找不到异常信息,这时候就需要查看supervisor中的log信息了,因为supervisor会对本机上的woker中的状态信息进行监控,并且woker的重启也是由supervisor操作的。

 

此时,查看supervisor中的日志信息可以看到以下内容:

2017-06-17 23:36:08 b.s.d.supervisor [INFO] Shutting down and clearing state for id 867ed61b-a9d5-423e-bb0b-b2e428369140. 
Current supervisor time: 1497713767. State: :timed-out, 
Heartbeat: #backtype.storm.daemon.common.WorkerHeartbeat{:time-secs 1497713735, :storm-id "data_process_1-170-1497518898", 
:executors #{[578 578] [868 868] [1158 1158] [1448 1448] [1738 1738] [-1 -1] [288 288]}, :port 6716}

 因此,可以判断为是由于supervisor获取状态信息timeout超时(其实supervisor是获取谁的状态信息,这点还不明确,因为woker的状态信息是在本地文件系统中的,难道是获取executor的状态?这点希望大家拍砖吐槽),导致把woker shut down 了,然后重启了woker。并且此时查看机器的状态,发现zookeeper的机器的CPU负载,会偶尔出现不稳定的状态。如下图:

 

 

因此,可以断定是由于supervisor获取状态信息超时导致的。

 

跟运维沟通,zookeeper的3台机器是跟supervisor部署在同一台机器上面的,因此会造成机器不稳定的情况出现。

 

平稳度过618,准备回家了。

 


 

 

 

 

 

 

 

  • 大小: 25.9 KB
1
2
分享到:
评论

相关推荐

    Web Worker用法汇总

    然而,FileSystem API由于安全和隐私原因,在现代浏览器中的支持并不广泛,已被Service Worker等更安全、更现代的技术取代。 总结来说,Web Worker是HTML5为JavaScript实现多线程处理而设计的一种技术,它可以提升...

    ThinkPHP5集成GatewayWorker

    - **日志记录**:合理记录和分析GatewayWorker的日志,有助于排查问题和优化性能。 总的来说,ThinkPHP5集成GatewayWorker可以轻松实现WebSocket功能,让PHP开发者也能享受到实时通信的魅力。同时,结合ThinkPHP5的...

    Storm 源码分析

    5. **容错机制**:为了保证数据处理的可靠性,Storm设计了一套完整的容错机制,包括消息确认机制、任务重启机制等。 #### 六、Storm与Hadoop的集成 虽然Storm和Hadoop分别针对实时计算和批处理两个不同的场景,但...

    Storm入门到精通

    * Worker:Storm 的执行节点,负责执行具体的计算任务。 Storm 属性 Storm 的主要属性包括: * fault-tolerant:Storm 可以自动恢复故障节点,保证系统的高可用性。 * scalable:Storm 可以根据需要水平扩展,...

    细细品味Storm_Storm简介及安装

    **2.5 启动Storm** - **启动Zookeeper**。 - **启动Nimbus**。 - **启动Supervisor**。 **2.6 验证Storm** 可以通过提交一个简单的Topology来验证Storm是否安装成功。 ### 总结 Storm是一款强大的分布式实时...

    Nginx worker_connections配置太低导致500错误案例

    不知道什么原因,后来找来SSH登录用户,密码,逐步排查,发现了Nginx worker_connections配置问题。 原来是Nginx配置文件中的worker_connections配置太低,只有50,导致与php-fpm交互过程中超出了connections限制,...

    Storm笔记-PPT

    2. **Supervisor**:在工作节点上运行,管理worker进程,接收Nimbus的指令启动或停止任务。 3. **Worker**:实际执行计算任务的进程,每个worker包含多个task。 4. **Spout**:数据源,负责从外部数据源拉取数据并...

    tp5.1+GatewayWorker 修复GatewayWorker在windows启动问题

    更改为自定义TP命令行启动要打开三个命令窗口启动,不方便测试。根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_...

    apache-storm-2.4.0.tar.gz

    描述中的 "帮助不能下载的同学下载storm安装包" 表明这个文件是为那些无法正常下载 Apache Storm 的人提供的,可能是因为网络问题或其他原因导致的下载失败。 在标签中,"storm 安装包" 暗示了这个文件的用途,即它...

    storm原理分析

    1. **Storm/workerbeats/<topology-id>/node-port**:存储 Worker 的运行状态和统计信息,包括 topology-id、Worker 上所有 Executor 的统计信息(例如发送和接收的消息数)、Worker 的启动时间和最后更新时间等。...

    nextjs-worker-example:这是Webpack使用Next.js加载Web Worker的示例

    NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....

    Storm源码走读笔记

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

    STORM学习文档

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

    Twitter storm

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

    storm的jar包

    2. **Nimbus**: 这是Storm的主协调节点,负责分配任务给各个工作节点(Supervisors),监控任务执行情况,并在节点故障时重新分配任务。 3. **Supervisor**: 监督运行在物理节点上的工作进程,为Nimbus提供资源,并...

    Laravel开发-laravel-worker

    - **Supervisor管理**:为了确保Worker的持续运行,常使用Supervisor进程管理工具进行监控和自动重启。 4. **Worker的并发与限制** - **并发处理**:可以通过`--concurrency`选项设置同时处理的任务数量,提高...

    storm实时数据处理

    当某个worker故障时,其任务可以被重新调度到其他节点,而未完成的处理可以通过重放未确认的事件来恢复,确保数据不丢失。 五、高级应用开发 书中可能涉及的高阶应用开发包括:窗口化操作(时间窗口、滑动窗口、...

    storm入门 PDF 下载

    3. **容错机制**:Storm提供了强大的容错能力,当某个worker或者task失败时,Nimbus会重新调度任务,确保数据不丢失。 4. **本地模式与生产环境**:学习Storm时,通常会先在本地模式下运行拓扑,进行调试和测试,...

    storm安装软件包

    6. **启动UI**:执行`bin/storm ui`命令启动Storm的Web UI,可以通过浏览器访问监控Storm集群的状态。 7. **提交拓扑**:编写好Storm拓扑后,使用`bin/storm jar`命令提交到Nimbus,开始处理数据流。拓扑定义了数据...

Global site tag (gtag.js) - Google Analytics