0

0

怎么排查Linux系统内核日志中的Segment Fault异常信息

冰川箭仙

冰川箭仙

发布时间:2026-04-21 15:33:24

|

736人浏览过

|

来源于php中文网

原创

直接查/var/log/messages或dmesg中含segfault的日志可快速定位崩溃进程、地址及指令指针;典型字段包括at(异常地址)、ip(崩溃指令地址)、error(页错误码),结合进程名和内存布局可缩小范围,再用core文件与gdb回溯调用栈深挖根因。

怎么排查linux系统内核日志中的segment fault异常信息

直接看 /var/log/messagesdmesg 输出,重点抓 kernel 日志里带 segfault 关键字的行,就能快速定位到哪次崩溃、哪个进程、什么地址出的问题。

查 kernel 日志里的 segfault 记录

系统内核在进程因段错误被强制终止时,会主动记一条日志。常用两种方式获取:

  • 查系统日志文件:grep "segfault" /var/log/messages(CentOS/RHEL)或 /var/log/syslog(Ubuntu/Debian)
  • 查内核环形缓冲区:dmesg | grep -i segfault,加 -T 可显示时间戳:dmesg -T | grep segfault

典型输出像这样:
Apr 15 05:22:33 server kernel: myapp[12345]: segfault at 7f8de69a9e18 ip 00000000004012ab sp 00007fff0ef9d540 error 4 in myapp[400000+13000]
其中关键字段含义:
- at 后是触发异常的虚拟地址(比如空指针解引用常为 0 或低地址)
- ip 是指令指针,即崩溃时正在执行的代码地址
- error 是页错误码,4 表示用户态写访问非法地址,6 常见于空指针读

结合进程名和内存布局缩小范围

日志里出现的进程名(如 myapp[12345])和地址范围(如 myapp[400000+13000])很重要:

  • 确认该进程是否是你自己的程序,避免误判为系统服务问题
  • [400000+13000] 表示可执行段从 0x400000 开始、长 0x13000 字节;用 objdump -d ./myapp | grep "4012ab" 可反查对应源码行(需带 -g 编译)
  • 如果 ip 落在 libcld 或其他库地址段(如 libc-2.12.so[...]),说明可能是 glibc 版本缺陷、内存破坏扩散,或调用了不安全函数(如 strcpy 写穿缓冲区)

注意 core dump 是否启用,它和日志互补

kernel 日志只告诉你“谁在哪崩了”,但不告诉你“为什么崩”。要深挖原因,得靠 core 文件配合 gdb:

Memo AI
Memo AI

AI音视频转文字及字幕翻译工具

下载
  • 先检查是否生成了 core:ulimit -c,若为 0 需临时开启:ulimit -c unlimited
  • 崩溃后找 core:find / -name "core*" -mmin -10 2>/dev/null(最近 10 分钟内的)
  • 用日志中记录的进程路径和找到的 core 一起调试:gdb /path/to/myapp core.xxx,再输入 bt 看完整调用栈

没有 core 时,日志里的 sp(栈指针)和 ip 就是唯一线索,务必保留原始二进制和调试符号(.debug-g 编译)。

排查常见诱因,对照日志特征

不同原因在日志中往往有倾向性表现:

  • 空指针解引用:常见 segfault at 0at 8at 10 等极小地址
  • 数组/缓冲区越界at 地址看起来“随机”但接近已知变量地址(如离栈顶不远),且常伴随 error 4(写越界)
  • 野指针或 use-after-freeat 地址是明显已释放的堆块地址(如 0x7f...a000 类似 malloc 返回值),ip 可能在 free 后的某次访问
  • 多线程竞态破坏栈sp 值异常(如远小于正常栈范围),或多个线程日志交织出现 segfault

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

通义千问
通义千问

阿里巴巴推出的全能AI助手

Claude
Claude

Anthropic发布的与ChatGPT竞争的聊天机器人

Cursor
Cursor

一个新的IDE,使用AI来帮助您重构、理解、调试和编写代码。

Hermes Agent
Hermes Agent

一位与您共同成长的Agent

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1752

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

768

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

424

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

1076

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

834

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

662

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

424

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

533

2023.07.25

phpEnv 多版本 PHP 切换与管理
phpEnv 多版本 PHP 切换与管理

系统讲解 phpEnv 的多版本 PHP 管理能力,涵盖 PHP 5.6、7.4、8.0、8.1、8.2、8.3 等多版本的下载安装与共存配置、不同站点绑定不同 PHP 版本的方法、php.ini 常用参数(内存限制/上传大小/时区/错误显示)的独立调整、PHP 扩展(Redis/Swoole/Xdebug/imagick)的安装与启用,帮助开发者灵活应对多项目多版本的开发需求。

0

2026.04.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送