程序日志停止滚动问题排查「建议收藏」

程序日志停止滚动问题排查「建议收藏」今天在做定时任务的时候,遇到了一个比较难搞的问题,这个问题也比较有意思,现在给大家分享一下,这个定时任务的调用入口是这样的。 // 进行 ldap同步 public void runLdapSyncJ

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

 // 进行 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 {}
    

代码100分

但是传入的参数中,第二个参数传入的是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 发布!
架构设计@工程设计@服务稳定性之路

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11003.html

(0)
上一篇 2022-12-18 11:30
下一篇 2022-12-18

相关推荐

  • Python D字典:高效存储和查询

    Python D字典:高效存储和查询Python中的字典是一种无序的“键-值”(key-value)数据结构,D字典则是使用Python中的高效的哈希表技术实现的一种新型字典。使用D字典可以大大提高对键值对的存储和查询效率,是处理大量键值对时的一种优秀的数据类型。以下是D字典的基本使用方法:

    2024-03-22
    89
  • lxml安装失败

    lxml安装失败lxml是Python上一个功能强大的XML/HTML处理库。它基于Cython以及libxml2/libxslt库构建,提供了简单易用的接口和快速的解析速度。在许多数据处理、爬虫、数据挖掘等领域,lxml被广泛应用。因而,安装lxml也成为Python学习者不可避免的一部分。

    2024-07-14
    48
  • redis内存满了会怎么样啊_redis内存不够用怎么办

    redis内存满了会怎么样啊_redis内存不够用怎么办redis内存满了服务会宕机,根据官方提供的参数可以避免因为内存满而导致服务宕机。redis设置配置文件的maxmemory参数,可以控制其最大可用内存大小,属性默认是关闭的,maxmemory-p…

    2022-12-20
    147
  • Python Setup.py:打包、安装、分发你的Python应用的便捷工具

    Python Setup.py:打包、安装、分发你的Python应用的便捷工具对于Python开发者来说,Python Setup.py是一个非常重要的工具。通过使用这个工具,你可以将你的Python应用打包成一个安装包并方便地安装到其他机器上去。同时,Python Setup.py还提供了非常好的模板和文档支持,使得开发者可以很轻松地创建自己的Python应用。

    2024-01-10
    100
  • Python os.path.join函数实现路径拼接

    Python os.path.join函数实现路径拼接在Python中,os.path.join()函数是用于拼接路径的。该函数接受多个路径组件作为参数,返回这些组件的连接路径。

    2023-12-08
    117
  • MYSQL5.7 INDEXES之如何使用索引(一)「建议收藏」

    MYSQL5.7 INDEXES之如何使用索引(一)「建议收藏」Most MySQL indexes (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) are stored in B-tr

    2022-12-22
    157
  • 优化用户交互:Python Tk Message框架的实现方法

    优化用户交互:Python Tk Message框架的实现方法在Python应用程序中,用户交互是至关重要的一环。为了提高用户体验,需要在GUI设计中选择合适的控件和方法。本文将介绍Tkinter消息框架在Python中的实现方法,以及如何优化用户交互。

    2024-02-28
    86
  • openGauss 2.0.0 版本正式发布「终于解决」

    openGauss 2.0.0 版本正式发布「终于解决」3月31日,openGauss 2.0.0 版本正式上线!openGauss 2.0.0 是openGauss社区发布的第一个Release版本。2.0.0版本与之前版本保持兼容的同时,也新增了众多…

    2023-04-12
    184

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注