首页 > 其他分享 >记一次线上空指针问题排查

记一次线上空指针问题排查

时间:2023-05-16 12:11:51浏览次数:32  
标签:elk traceId 上空 问题 排查 日志 排序 指针

前言

今天收到一封告警邮件, 内容如下

com.example.dubbo.filter.ExceptionFilter#invoke [traceId] [DubboServerHandler-thread-19] [DUBBO] Got unchecked and undeclared exception which called by ip. service: com.example.TestService, method: testMethod, exception: java.lang.NullPointerException: null, dubbo version: 2.6.9, current host: ip
java.lang.NullPointerException: null

只有一个 npe 的信息, 看到这里我是懵逼的, 完全不知道怎么会事, 还好我们有 traceId

排查问题

查找日志

直接登录 elk, 搜索 traceId, 跟着调用链一路向下走, 然后还是把我看吐了, 一开始直接用 elk 的按时间排序, 降序排序, 跟了半天代码, 越看越不对劲, 排序后的内容如下图
image
elk 的排序是根据左边的 日志时间 来排序的, 但它并不是日志打印的时间, 真正的打印日志的时间应该是右边 message 那里的, 因为这个疏忽, 导致看了好久日志硬是没看出来问题

查看代码

在明白这个 日志时间 的坑后, 通过手动按照时间排序, 终于找出了正确的调用链, 最后的最后, 问题锁定在了一行代码上:
image
其它地方全都做了判空处理, 只有这里可能出现问题

复现问题

稍微写一个 demo, idea 直接有警告了
image
执行一下, 果然报错了
image
错误提示也是只有一个 npe

结语

在用 Steam 提供的便捷操作时要注意判空

标签:elk,traceId,上空,问题,排查,日志,排序,指针
From: https://www.cnblogs.com/Hakurei-Reimu-Zh/p/17404549.html

相关文章

  • opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,
    opencv表识别工业表智能识别数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别YYID:37400640060136589......
  • 智能指针与RAII
    对象生存期和资源管理(RAII)RAII:ResourceAcquisitionIsInitialization,资源获取即初始化。是C++语言的一种管理资源、避免泄漏的惯用法。C++标准保证任何情况下,已构造的对象最终会销毁,即它的析构函数最终会被调用。简单的说,RAII的做法是使用一个对象,在其构造时获取资源,在对象生......
  • C基础笔记(指针)
    指针&变量   取地址的符号 *:地址得到地址里的东西指针变量通常情况下将指针指向地址赋为NULL被赋为NULL值的指针被称为空指针指针是一个用数值表示的地址,可以对指针进行四种算术运算:++、--、+、-指针可以用关系运算符进行比较,如==、<和>C......
  • 指针进阶(3)————玩转指针
    指针进阶内容不多,但面面俱到,都是精华1.回调函数:2.详解qsort函数参数:3.模拟实现qsort函数回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到另一个函数中,在这个函数内部使用了外部写好的一个函数.举一个例子,看完你一定明白了例子:voidmenu(void){ print......
  • 2、c++中的指针参数传递和引用参数传递
    指针参数传递本质上是值传递。值传递的过程中,被调函数的形式参数作为被调函数的局部变量处理,会在栈中开空间用以存放由主调函数传递的实际参数,从而形成了实参值得一个副本。而值传递的特点是被调函对形参的任何修改都不会影响实参值。(如果想通过指针参数来修改主调函数的相关变量或......
  • 算法刷题系列之移除元素:快慢指针技巧
    题目+日期移除元素2023年5月14日17点50分基础知识暴力解法这个题目暴力的解法就是两层for循环,一个for循环遍历数组元素,第二个for循环更新数组。双指针法(快慢指针法)通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。定义快慢指针快指针:寻找新数组的元......
  • unique_ptr智能指针介绍
    unique_ptr是C++标准库提供的智能指针之一,具有以下特点:独占所有权:unique_ptr独占指向对象的所有权,确保在任何时候只有一个unique_ptr可以指向同一个对象。当unique_ptr被销毁或转移所有权时,它会自动释放指向的对象,无需手动删除。轻量高效:unique_ptr是一种轻量级的智能指针,通......
  • 指针进阶(2)——玩转指针
    今天内容不多,但都是精华。1.数组参数和指针参数2.函数指针2.1笔试题3.函数指针数组1.数组参数和指针参数例1:一维数组传参voidtest(intarr[]){}voidtest(intarr[10]){}voidtest(int*arr){}voidtest2(int*arr2[20]){}voidtest2(int**arr2){}传参的时候,*arr2......
  • 【Leetcode算法01】双指针Two Pointers
    TableofContents同向双指针剑指offer05.替换空格相向双指针344.反转字符串206.反转链表151.翻转字符串里的单词19.删除链表的倒数第N个节点160.相交链表142.环形链表II15.三数之和18.四数之和快慢双指针27.移除元素Solutions27.移除元素力扣题......
  • 双指针——最长连续不重复子序列(例)
    给定一个长度为n的整数序列,找出最长的不包含重复的数的连续区间,输出它的长度。数据范围: 输入样例:512235输出样例:3 #include<iostream>//C++标准库中的头文件.用于控制台输入和输出。#include<cstring>//用于处理字符串的函数和操作#include<algorithm>/......