求助:程序运行中出现的ClassNotFoundException和NoClassDefFoundError

nfsnyy007 2016-04-11 04:38:03
错误log是这样的:
Caused by: java.lang.NoClassDefFoundError: com/envision/idp/platform/algorithm/algoUtil/FreqData
at com.envision.idp.platform.data.JdbcDataReriever.getFreqData(JdbcDataReriever.java:296)
at com.envision.idp.platform.data.AlgorithmInputDataTemplate.getFreqData(AlgorithmInputDataTemplate.java:56)
at com.envision.idp.platform.algorithm.impl.AlgorithmInputImpl.getFreqData(AlgorithmInputImpl.java:74)
at com.envision.idp.platform.algorithm.impl.FreqDomainAlgorithm.intellDetect(FreqDomainAlgorithm.java:170)
at com.envision.idp.platform.algorithm.impl.FreqDomainAlgorithm.execute(FreqDomainAlgorithm.java:136)
at com.envision.idp.platform.scheduler.job.PlatformQuartzJobBean.executeInternal(PlatformQuartzJobBean.java:77)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:112)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 more
Caused by: java.lang.ClassNotFoundException: com.envision.idp.platform.algorithm.algoUtil.FreqData
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 9 more
值得一提的是。这个错误是偶发性的。
我这里是开了多台机器并发的执行quartz任务,任务量很大,然后就会出现一些节点偶发性的找不到类。问题是同一个节点偶尔会发生找不到这个类的情况。也就是说这个类是存在的,偶尔会找不到。大家帮忙看一下,或者谁也碰到过类似的情况给点意见。100分送上。。大家一起研究研究
...全文
371 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
nfsnyy007 2016-04-20
  • 打赏
  • 举报
回复
引用 12 楼 EverWHL 的回复:
[quote=引用 10 楼 nfsnyy007 的回复:] 问题得到解决了。原因是我们的另外一个模块中也访问了quartz的表,他们进行了源码修改阻止了任务的运行,但是这个模块并没有加入集群。修改配置后问题解决。查看表qrtz_fired_triggers通过state字段可以看到那些任务是单机的,那些任务是集群的。还有就是这个问题的原理我并不清楚。我是用排查法解决的。希望有大神碰到过这个问题解释一下。为什么有集群外的节点操作集群的表就会出现找不到类的错误呢?网上看到的这个错误一般和我这个修改没什么关系。。。[/quote 源码修改是什么阻止了任务的运行什么意思,意思修改了集群的表,导致批处理任务不能正确执行吗
之前他们写了一个配置任务的模块,使用了一些quartz的函数方法什么的,但是这个模块不需要执行任务,于是他们就把执行任务的把部分给改了,让这个模块只进行任务的配置。但是这个模块和集群中的节点用的是同一个数据库,然后这个模块并没有加入到集群中。ps:这里我认为他们做的不对,我觉得配置任务单纯的操作表就可以了不需要借助quartz。前面人搞的东西不想深挖~~
EverWHL 2016-04-20
  • 打赏
  • 举报
回复
[quote=引用 10 楼 nfsnyy007 的回复:] 问题得到解决了。原因是我们的另外一个模块中也访问了quartz的表,他们进行了源码修改阻止了任务的运行,但是这个模块并没有加入集群。修改配置后问题解决。查看表qrtz_fired_triggers通过state字段可以看到那些任务是单机的,那些任务是集群的。还有就是这个问题的原理我并不清楚。我是用排查法解决的。希望有大神碰到过这个问题解释一下。为什么有集群外的节点操作集群的表就会出现找不到类的错误呢?网上看到的这个错误一般和我这个修改没什么关系。。。[/quote 源码修改是什么阻止了任务的运行什么意思,意思修改了集群的表,导致批处理任务不能正确执行吗
nfsnyy007 2016-04-18
  • 打赏
  • 举报
回复
问题得到解决了。原因是我们的另外一个模块中也访问了quartz的表,他们进行了源码修改阻止了任务的运行,但是这个模块并没有加入集群。修改配置后问题解决。查看表qrtz_fired_triggers通过state字段可以看到那些任务是单机的,那些任务是集群的。还有就是这个问题的原理我并不清楚。我是用排查法解决的。希望有大神碰到过这个问题解释一下。为什么有集群外的节点操作集群的表就会出现找不到类的错误呢?网上看到的这个错误一般和我这个修改没什么关系。。。
nfsnyy007 2016-04-18
  • 打赏
  • 举报
回复
得到一个教训,不要让集群外的程序操作集群的quartz表,可能一时看不到什么后果,但是任务数量级上去之后就会爆发问题。
  • 打赏
  • 举报
回复
帮顶,这种错误是很头疼的,坐等大神
YYZhQ 2016-04-13
  • 打赏
  • 举报
回复
帮顶,最怕这种随机错误,希望楼主找到答案后能分享一下。
伯恩dadi 2016-04-12
  • 打赏
  • 举报
回复
我觉得是之前没有错误,是因为没有跑到错误的分支,现在出现错误了,可能是由于JDK有关,你看看你本地和服务器上的jDK版本是不是一致;也可能是少引用了一些Jar包。你可以在分支里里打印一些日志,看看到底是哪里出错,一步一步排查。 任务多的话,并发很容易出错,这也是本地测试时不容易发现的问题,祝你好运
nfsnyy007 2016-04-11
  • 打赏
  • 举报
回复
这里在描述一下情况哦。 首先楼主是用quartz实现的集群任务调度。每天大概要跑几万个任务的样子,最近突然发现一些任务漏跑了(前阵子任务数量多了很多)。查找原因的时候发现一些任务执行的过程中报1L的 错误了。感觉是高并发的时候出现的错误。但是很迷惑为什么?
nfsnyy007 2016-04-11
  • 打赏
  • 举报
回复
引用 1 楼 nfsnyy007 的回复:
到网上找原因看到有人说NoClassDefFoundError这个错误有一种可能是classpath没有这个类的引用造成的。如果是这个情况,难道我的classpath会存在变化的情况?我如何监控classpath的变化?我想打一下log看看
谢谢,我现在存在的问题是
引用 3 楼 who_is_xiaoming 的回复:
http://www.blogjava.net/lusm/archive/2007/09/28/149363.html http://www.th7.cn/db/mysql/201507/112458.shtml http://www.blogjava.net/anchor110/articles/391408.html 可以看下 能不能解决我也说不了
首先谢谢你,不过我这里的问题没这么简单。我的程序单机情况下没错。放到集群环境中,同一个节点在跑任务,可能100个任务的执行过程中会发生如若干个这种情况。也就是说类是存在的也是可以找到的。但是个别任务跑的时候就是找不到。ps:每次发生错误的任务是不同的,类也不同。很纠结
nfsnyy007 2016-04-11
  • 打赏
  • 举报
回复
引用 2 楼 u012150261 的回复:
帮顶,上次我也遇到NoClassDefFoundError这种情况,就是写代码的时候是有这个类的,但程序运行的时候就找不到了,没有解决。而且这种情况不是异常,是错误。
谢谢~~
CoderPrince 2016-04-11
  • 打赏
  • 举报
回复
帮顶,上次我也遇到NoClassDefFoundError这种情况,就是写代码的时候是有这个类的,但程序运行的时候就找不到了,没有解决。而且这种情况不是异常,是错误。
nfsnyy007 2016-04-11
  • 打赏
  • 举报
回复
到网上找原因看到有人说NoClassDefFoundError这个错误有一种可能是classpath没有这个类的引用造成的。如果是这个情况,难道我的classpath会存在变化的情况?我如何监控classpath的变化?我想打一下log看看

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧