此时此刻,正在等到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,准备回家了。
相关推荐
HTML5 js后台实现多线程 克服js单线程导致页面卡死情况
更改为自定义TP命令行启动要打开三个命令窗口启动,不方便测试。根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_...
• BasicBolt • Storm 批处理 • Storm TOPN • Storm 流程聚合 • Storm DRPC • Storm executor、worker、task之间的关系和调优 • Storm异常解决
NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....
内容概要: • Storm 记录级容错原理 • Storm 配置详解 • Storm 批处理 • Storm TOPN • Storm 流程聚合 • Storm DRPC • Storm executor、worker、task之间的关系和调优 • Storm异常解决
gif.worker.js js的多张图片转成gif的插件
线程示例WorkerThread_demo,线程示例WorkerThread_demo, 线程示例WorkerThread_demo,
webworker封装调用face-api.js
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
汇总插件网络工作者加载器汇总插件来处理Web Worker。 可以内联工作代码或使用代码拆分发出脚本文件。 处理Worker依赖项并可以发出源映射。 工作依赖项已添加到汇总的监视列表。 支持Node.js环境的捆绑工人入门yarn ...
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
简单的定时任务 .NETCore3.1 WorkerService windows服务 linunx服务程序
Thinkphp6 redis队列 消息事件 gatewayworker聊天打通版
官方只给出了workerman和thinkphp的整合教程,但是没有和gateway的整合教程,网上的教程水平参差不齐,本人就曾写过一篇现在...index/controller/Events 中可以编写事件,可以完美使用thinkphp和gatewayWorker全部功能
前端预览pdf pdf.js中代码文件pdf.worker.js,文件过大,可修改web/viewer.js中的workerSrc路径,改为对应版本地址
http://blog.csdn.net/comaple/article/details/7896167 storm实时流式计算框架集群搭建过程中,用到的jar文件。
web worker 详解 web worker 详解 web worker 详解 web worker 详解
Laravel开发-laravel-worker Laravel工人的定制管理
前端开源库-web-worker-manager网络工人经理,工人经理