某应用出现启动后集群中部分node成功,部分node失败
来源:互联网 发布:原单厂家直拿wsj淘宝 编辑:程序博客网 时间:2024/05/01 03:36
解决过程:
1、失败的node抛出的是NoClassDefFoundError,这些node在环境上和应用包上是完全一致的,因此猜想是classloader装载class时出现了什么问题;
2、在启动参数上增加了-XX:+TraceClassLoading,想看看成功的node和失败的node是不是从第一个地方加载的相应的类,悲催的是成功的node加上了这参数后启动超慢,于是只好放弃;
3、由于不能用TraceClassLoading,只好从ClassLoader方面来跟踪这个类的加载,于是从应用层上做了相应的分析,找出了相应的classloader,然后用btrace相应的进行了跟踪,才终于发现成功的node和失败的node装载此类时不是从同一地方装载的,而其中有一个地方的这个类引用了一个不存在的类,于是就出现了NoClassDefFoundError。
总结:
在经过分析后,猜想是在这两个不同的node上classloader在list一个目录下的文件时,出现了顺序不同的现象,于是后来写了一个简单的程序在两个node上list那个目录的文件,发现返回的顺序果然不同,这个具体的原因为File.listFiles最后会调用到readdir函数,而这个函数返回的文件列表是按inode number排序的,因此在每台linux机器上确实有可能不同,当一个目录下有两个jar中有相同名字但不同内容的class时(话说这也是java应用中比较麻烦的问题,这个专门写篇blog来说下,java 8的模块化真的非常重要),就悲催了,一个保护做法是在实现classloader时,最好是先对listFiles排下序,避免集群中node出现表现不一致的问题。
转载:http://bluedavy.me/?p=300
- 某应用出现启动后集群中部分node成功,部分node失败
- hadoop集群启动成功但live node为0
- hadoop集群启动成功但live node为0
- yarn node manager启动失败
- Hadoop Yarn集群 主节点的 data node没有启动成功
- Hadoop Yarn 集群 从节点的data node没有启动成功
- HP service gurde node 启动失败解决
- 【Node】node启动过程
- nexus安装成功后启动失败解决方案
- cocos2d中游戏失败后再次回到游戏主界面出现“Node still marked as running on node destruction! Was base class onExit() “
- Linux开机启动/etc/rc.d/rc.local 中部分命令执行失败
- Tomcat部署应用,客户端阻止cookie时,成功登录后,还是出现登录失败的问题解决
- SQL查询部分数据表中部分数据
- 使用CSLoader获取Node后再获取精灵失败
- Hadoop name node 目录更改, NameNode 进程启动失败
- oracle rac node 2 down 了,但启动失败
- brew link node 失败
- nvmw 安装node失败
- oracle 监听无法启动处理
- 排序(五)——关于桶式排序
- hdu 4771好题
- 二叉树的遍历
- POJ 1502 MPI Maelstrom
- 某应用出现启动后集群中部分node成功,部分node失败
- 查找冲突的jar文件
- 二分(折半)查找
- git获取Spring framework,用gradle构建并打包,maven负责依赖
- hdu 4784 Dinner Coming Soon
- 找call总结
- Asp.Net Ajax (1)---入门篇
- 找树根和孩子
- MySQL无法使用、导入中文数据乱码