看完文章,点赞收藏,谢谢您嘞
调度相关文章以及一些异常场景的解决方案:
https://vip.kingdee.com/article/218298504655816448
最近给伙伴排查一个调度保存失败,抛空指针的问题,给出解决方案。
异常信息
调用堆栈: kd.bos.exception.KDException: null at kd.bos.service.operation.OperationServiceImpl.localInvokeOperation(OperationServiceImpl.java:115) at kd.bos.entity.operate.Save.callBillOperationService(Save.java:78) at kd.bos.entity.operate.DefaultEntityOperate.invokeBillOperation(DefaultEntityOperate.java:466) at kd.bos.entity.operate.DefaultEntityOperate.callEntityOperate(DefaultEntityOperate.java:408) at kd.bos.form.operate.EntityOperate.invokeOperation(EntityOperate.java:52) at kd.bos.form.operate.FormOperate.execute(FormOperate.java:245) 。。。。。。。。 。。。。。。。。省略部分异常日志 。。。。。。。。 Caused by: java.lang.NullPointerException at kd.bos.schedule.serviceImpl.ScheduleManagerImpl.sendScheudleChangedMessage(ScheduleManagerImpl.java:48) at kd.bos.schedule.serviceImpl.ScheduleManagerImpl.afterUpdateSchedule(ScheduleManagerImpl.java:38) at kd.bos.schedule.opplugin.ScheduleOpPlugin.beforeExecuteOperationTransaction(ScheduleOpPlugin.java:37) at kd.bos.entity.plugin.OperationServicePlugInProxy.fireBeforeExecuteOperationTransaction(OperationServicePlugInProxy.java:228) at kd.bos.service.operation.EntityOperateService.fireBeforeExecuteOperationTransaction(EntityOperateService.java:1300) at kd.bos.service.operation.EntityOperateService.doExcete(EntityOperateService.java:485) at kd.bos.service.operation.EntityOperateService.excute(EntityOperateService.java:337) at kd.bos.service.operation.OperationServiceImpl.localInvokeOperation(OperationServiceImpl.java:103) ... 94 more
打开调度监控,查看信息,发现界面很卡,一直处于加载中。
异常原因分析和排查方案
调度服务ScheduleService,应该是没有正常运行的,因为调度监控一直在加载中。
通常情况下,调度服务ScheduleService没有启动成功,都是配置异常导致的,因为ScheduleService要正常工作,必须要依赖于zookeeper,通过zookeeper来进行调度任务的分配,分给到挂在注册中心zookeeper下面的cosmic来执行。
(1)
于是,排查了伙伴的集群环境,进入monitor,
关于monitor,请查看知识区官方文档:
https://club.kdcloud.com/article/86828762196557056
发现在集群环境上搭建了2台cosmic。
勾选,进入1台cosmic的系统属性,
(2)
搜索Schedule.zk,查看系统属性,发现ip地址不对。
这里的ip地址必须是 注册中心zookeeper的地址和端口号,当前伙伴的zk并不是部署在本机。
(3)
登录mc,在公共配置方案里面,查看Schedule.zk相关配置,发现这个配置是错误的
解决方案
(1)
发现了公共配置方案里面,Schedule.zk相关配置是错误的,所以把ip地址修改为 zookeeper所在的ip地址。
(2)
修改完成之后点击保存
(3)
改了配置方案之后,发布集群,把最新的参数发布到zookeeper上
(4)
发布完成之后,重启cosmic,如果还有问题,同时重启cosmic和zookeeper。
因为调度任务ScheduleService是在cosmic(苍穹)启动时,执行初始化的。
所以,如果ScheduleService本身初始化失败,没有启动,就需要重启苍穹。
(5)
查看monitor
(6)
重启cosmic后,查看日志,发现ScheduleService已经启动
(7)
之后保存就能保存成功了:
(8)
调度监控也能正常运行了:
总结
1.如果遇到调度创建异常,先排查monitor上面的zookeeper相关属性。
2.修改了mc的公共环境变量之后,必须发布到集群。
3.遇到调度任务ScheduleService异常,或者是其他的Service异常,应该是某些属性配置异常了,可以从相关属性着手排查。
4.修改Service相关属性参数之后(例如文章里面的 ),最后一步,必须重启cosmic,让ScheduleService重新初始化。
推荐阅读