首页 文章 精选 留言 我的

精选列表

搜索[crash],共986篇文章
优秀的个人博客,低调大师

yarn RM crash问题一例

今天收到线上的resource manager报警: 报错信息如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 2014 - 07 - 08 13 : 22 : 54 , 118 INFOorg.apache.hadoop.yarn.util.AbstractLivelinessMonitor:Expired:xxxx: 53356 Timedoutafter 600 secs 2014 - 07 - 08 13 : 22 : 54 , 118 INFOorg.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl:DeactivatingNodexxxx: 53356 asitisnowLOST 2014 - 07 - 08 13 : 22 : 54 , 118 INFOorg.apache.hadoop.yarn.server.resourcemanager.rmnode.RMNodeImpl:xxxx: 53356 NodeTransitionedfromUNHEALTHYtoLOST 2014 - 07 - 08 13 : 22 : 54 , 118 FATALorg.apache.hadoop.yarn.server.resourcemanager.ResourceManager:ErrorinhandlingeventtypeNODE_REMOVEDtothescheduler java.lang.NullPointerException atorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.removeNode(FairScheduler.java: 715 ) atorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.handle(FairScheduler.java: 974 ) atorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler.handle(FairScheduler.java: 108 ) atorg.apache.hadoop.yarn.server.resourcemanager.ResourceManager$SchedulerEventDispatcher$EventProcessor.run(ResourceManager.java: 378 ) atjava.lang.Thread.run(Thread.java: 662 ) 2014 - 07 - 08 13 : 22 : 54 , 118 INFOorg.apache.hadoop.yarn.server.resourcemanager.ResourceManager:Exiting,bbye.. 2014 - 07 - 08 13 : 22 : 54 , 119 INFOorg.apache.hadoop.yarn.event.AsyncDispatcher:Sizeofevent-queueis 1000 2014 - 07 - 08 13 : 22 : 54 , 119 INFOorg.apache.hadoop.yarn.event.AsyncDispatcher:Sizeofevent-queueis 2000 这是一个bug,bug id:https://issues.apache.org/jira/browse/YARN-502 根据bug的描述,是在rm删除标记为UNHEALTHY的nm的时候可能会触发bug(第一次已经删除,后面删除再进行删除操作时就会报错)。 根据堆栈信息来看代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler: protected ResourceSchedulerscheduler; private final class EventProcessor implements Runnable{ //开启一个EventProcessor线程,对event进行处理 @Override public void run(){ SchedulerEventevent; while (!stopped&&!Thread.currentThread().isInterrupted()){ try { event=eventQueue.take(); //从eventqueue里面拿出event } catch (InterruptedExceptione){ LOG.error( "Returning,interrupted:" +e); return ; //TODO:KillRM. } try { scheduler.handle(event); //处理event } catch (Throwablet){ //cacheevent的异常 //Anerroroccurred,butweareshuttingdownanyway. //IfitwasanInterruptedException,theveryactof //shutdowncouldhavecauseditandisprobablyharmless. if (stopped){ LOG.warn( "Exceptionduringshutdown:" ,t); break ; } LOG.fatal( "Errorinhandlingeventtype" +event.getType() //根据日志来看,这里获取的event.getType()为NODE_REMOVED + "tothescheduler" ,t); if (shouldExitOnError &&!ShutdownHookManager.get().isShutdownInProgress()){ LOG.info( "Exiting,bbye.." ); System.exit(- 1 ); } } } } } 这里可以看到可以通过shouldExitOnError可以控制RM线程是否退出。 1 2 3 4 5 6 7 8 private boolean shouldExitOnError= false ; //初始设置为false @Override public synchronized void init(Configurationconf){ //在做初始化时,可以通过配置文件获取 this .shouldExitOnError= conf.getBoolean(Dispatcher.DISPATCHER_EXIT_ON_ERROR_KEY, Dispatcher.DEFAULT_DISPATCHER_EXIT_ON_ERROR); //参数在Dispatcher类中定义 super .init(conf); } 1 2 3 4 5 6 7 8 9 10 11 12 org.apache.hadoop.yarn.event.Dispatcher类: public interface Dispatcher{ //Configurationtomakesuredispatchercrashesbutdoesn'tdosystem-exitin //caseoferrors.Bydefault,itshouldbefalse,sothattestsarenot //affected.Foralldaemonsitshouldbeexplicitlysettotruesothat //daemonscancrashinsteadofhangingaround. public static final StringDISPATCHER_EXIT_ON_ERROR_KEY= "yarn.dispatcher.exit-on-error" ; //控制参数 public static final boolean DEFAULT_DISPATCHER_EXIT_ON_ERROR= false ; //默认为false EventHandlergetEventHandler(); void register(Class<? extends Enum>eventType,EventHandlerhandler); } 在ResourceManager类的init函数中: 1 2 3 4 @Override public synchronized void init(Configurationconf){ this .conf=conf; this .conf.setBoolean(Dispatcher.DISPATCHER_EXIT_ON_ERROR_KEY, true ); //这个值的默认值为true了(覆盖了Dispatcher类中的DEFAULT设置) 即默认在遇到dispather的错误时,会退出。 遇到错误是否退出可以由配置参数yarn.dispatcher.exit-on-error决定。不过这个改动影响比较大,最好还是不要设置,还是打patch来解决吧。 官方的patch也比较简单,即在rmnm时进行一次判断,防止二次删除操作: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ---hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java +++hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmnode/RMNodeImpl.java @@- 501 , 8 + 501 , 13 @@ public DeactivateNodeTransition(NodeStatefinalState){ public void transition(RMNodeImplrmNode,RMNodeEventevent){ //Informthescheduler rmNode.nodeUpdateQueue.clear(); -rmNode.context.getDispatcher().getEventHandler().handle( - new NodeRemovedSchedulerEvent(rmNode)); + //IfthecurrentstateisNodeState.UNHEALTHY + //Thennodeisalreadybeenremovedfromthe + //Scheduler + if (!rmNode.getState().equals(NodeState.UNHEALTHY)){ +rmNode.context.getDispatcher().getEventHandler() +.handle( new NodeRemovedSchedulerEvent(rmNode)); +} rmNode.context.getDispatcher().getEventHandler().handle( new NodesListManagerEvent( NodesListManagerEventType.NODE_UNUSABLE,rmNode)); 本文转自菜菜光 51CTO博客,原文链接:http://blog.51cto.com/caiguangguang/1436087,如需转载请自行联系原作者

优秀的个人博客,低调大师

native程序异常crash 定位解决方案

Android程序崩溃退出的时候,会将崩溃的堆栈信息保存在/data/tombstones目录下。 该目录需要ROOT权限才能够访问。所以为了访问该路径,手机必须先ROOT破解。jni或者java 代码崩溃的信息都被记录。该目录下会有九个tombstones_0(1-9),生成的崩溃信息会循环写入 该文件中,测试之前可以讲所有的文件删除,就可以得到唯一的一个崩溃日志。生成的文件 记录了详细的堆栈信息。 为了拷贝到电脑上,需要通过adb shell进入手机终端,然后su,获取root权限,接着 拷贝文件到sdcard上,退出adb shell,之后,通过adb pull /sdcard/tombstone_00 E: 拷贝到E盘 该文件详细记录了代码崩溃时候的具体信息,包括了崩溃的堆栈,如果能够获取到该信息,就可以通知堆栈了解崩溃点的信息,但是一般情况下,我们看不到该文件。 当我们发现/data目录为空的情况下,实际上表示我们没有root访问权限,(root是最高级的访问权限,而不是启动的时候的访问文件的权限,这个权限需要对android手机进行权限进行破解) 注意 查看tombstons文件,发现很多情况下,没有提供源码错误的函数名称和源码的错误行号,可以通过ndk-stack.exe 程序对崩溃日志再次定位 $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump tombstons 例子 D:\Development\Android\android-ndk-r10b\ndk-stack.exe–sym armeabi-v7a –dump E:\docs\tombston_01 > E:/detail.txt 附录: 不同的手机遇到空指针的时候,处理的方式是不一样的,小米手机直接闪退,而华为平板依然能够直接运行,跳过崩溃的错误,说明测试多种机型的重要性。 参考 http://cmzx3444.iteye.com/blog/1463035 本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1408644,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册