程序日志停止滚动问题排查

今天在做定时任务的时候,遇到了一个比较难搞的问题,这个问题也比较有意思,现在给大家分享一下,这个定时任务的调用入口是这样的。

 // 进行 ldap同步
public void  runLdapSyncJob(){
    try {
        ldapSyncService.syncLdap();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这个方法ldapSyncService.syncLdap()向外抛出异常,这个方法内部会调用另一个方法

/**
 * 创建部门目录并返回部门cn
 * @param departmentDtoMap
 * @param targetDepartId
 * @param rootCn
 * @return
 * @throws Exception
 */
public  String creatStaffDepartCN(Map<Long,DepartmentDto> departmentDtoMap ,long targetDepartId,String rootCn, Set<String> ldapDUSet ) throws Exception {}

但是传入的参数中,第二个参数传入的是Long类型,而且是null,一开始没排查出来,因为一直加日志,在调用处,数据返回处,数据验证处都加日志了,但是通过定时任务管理平台执行任务之后方法执行到一定行数就什么也没有了,也没有日志,怀疑是可能有死循环(程序里写了while)结果top一下,发现cpu,内存都很正常,结合之前遇到的这种情况也看了下这个定时任务的进程中线程状态,看看有没有blocked或者死锁(单线程操作应该不会有死锁),发现也没有。
这就尴尬了,于是想到了可能异常被框架或者jvm吃掉了,于是在上面两个方法里都加了try,catch

ldapSyncService.syncLdap() throws Exception{
try{
......
}catch(Exception e){
e.print();
}
}

creatStaffDepartCN() throws Exception{
try{
......
}catch(Exception e){
e.print();
}
}

再次部署执行之后发现确实有异常了,然后抛出了空指针,这里我恍然大悟,因为creatStaffDepartCN这个方法的第二个入参确实没有值传进去的。然后怀疑是否是因为自动装箱和拆箱过程中即使出现异常也会被jvm吃掉。本地简单写了一个demo,运行发现会报空指针。
这里没有打印异常我判断有下面几种可能
1.定时任务框架没有帮忙抛出。
2.最外层的try,catch没有生效
3.jvm把异常吃掉了

下面总结一下遇到程序日志停止滚动之后我们可以做的一些操作
1.top看是否由于FGC等问题导致的服务停止响应
2.jstack -l pid看一下进程内线程是否大量有blocked状态的线程
3.在日志停止滚动的代码上下文增加try,catch语句尝试捕获异常。

本文由博客一文多发平台 OpenWrite 发布!
架构设计@工程设计@服务稳定性之路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值