无日志定位代码段

    在生产环境中,一般情况下不会打开core文件开关,所以如果进程运行过程中core掉了,就无法找到程序的调用栈,而且此时日志文件中也没有记录core掉的原因,那么此时如何找出程序是core在哪行代码呢 ?笔者在工作中就遇到过这样一个问题。

1. 现场分析

    现场有用的信息中,应用程序日志中没有记录任何有用信息,只是在/var/log/messages中记录了程序core的一段信息如下:

2021-12-04T16:46:07.584931+08:00|info|kernel[-]|[28775921.634699] WorkerThd[48892]: segfault at 0 ip 00007fc8ae0c41d9 
sp 00007fc8787dd500 error 4 in libjemalloc.so[7fc8ae06a000+95000]

    这里介绍一下/var/log/messages这个文件, messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。通常,/var/log/messages 是您在做故障诊断时首先要查看的文件。

    从现场信息中,我们可以分析出程序core的原因:

  • WorkerThd:线程名
  • 48892:线程ID
  • segfault at 0:表示线程访问这个空地址时出现错误,即空指针异常
  • ip 00007fc8ae
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值