千家信息网

浅析Linux下利用coredump技术追查进程崩溃原因

发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何。如果系统开启了coredump,准确的说如果当前的
千家信息网最后更新 2024年12月04日浅析Linux下利用coredump技术追查进程崩溃原因

最近项目中出现了一个问题,服务器端程序会突然崩溃退出,我们采取了coredump技术以找到崩溃原因,即确定进程退出时正在执行的函数是哪个,其状态如何。

如果系统开启了coredump,准确的说如果当前的shell环境开启了coredump,当前shell环境下的程序崩溃退出时,会把当时进程的栈的内存状态写入core文件。使用gdb可以查看这个core文件中保存的栈的状态,gdb a.out core。(关于coredump的开启和对shell的理解,请参考本人另一篇博客《使用dotnet-dump 查找 .net core 3.0 占用CPU 100%的原因解析》,关于gdb请参考《gdb调试命令的使用及总结》)

core文件生成的位置默认是可执行文件所在的位置,名称默认为core,其位置和名称是可以设置的,我的设置为:

mkdir /home/corefile echo "/home/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern 

这样,生成的core文件会放在/home/corefile目录下,core文件名会以core-%e-%p-%t的形式出现,其中%e表示可执行文件的名称,%p表示进程,%t表示生成core文件的时间(注意是unix时间)。

下面是一个可以导致coredump的例程:

划线处是会导致coredump处。执行后会在/home/corefile目录下产生以下文件:

[root@localhostwin7]# ls /home/corefile/

a.out是可执行文件名,5082是PID,1490760381是产生该文件的unix时间。把a.out 和core文件放在一个目录下,使用命令:

gdb a.out core-a.out-5082-1490760381

进入gdb,然后使用backtrace命令,即可看进程退出时的栈的内存状态,如下所示:

可见,进程退出时,执行的最后一个函数是square函数。 ----------------

总结

以上所述是小编给大家介绍的Linux下利用coredump技术追查进程崩溃原因,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

文件 进程 状态 原因 位置 函数 名称 命令 时间 目录 生成 技术 内存 文件名 环境 程序 参考 博客 形式 所在 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发组织结构分析 服务器装机需要驱动吗 消防知识网络安全大( 网络安全宣传班会新闻稿 面对网络安全如何防范 gccp6.0有没有本地数据库 对数据库性能优化方案 数据库oracle学习培训费用 健康网络安全信息征文 数据库如何修改列 更改代理服务器设置 灰色 我的世界网易版服务器崩了怎么办 学习网络安全好找工作吗 广州弘网络技术有限公司 汽车软件开发实践 二手书 数据库大师初级 nas文件服务器区别 免费的数据库客户端有什么软件 国家计算机网络安全专业 在数据库添加一个数据文件 检查U6管理服务器 linux服务器图片管理 软件开发后期维护岗位职责 互联网科技公司新总部 战地一怎么在局内看服务器名字 u8不小心点到初始数据库怎么办 东莞网络安全工程师包住宿 js自动生成数据库关系图 中国校园网络安全数据统计 服务器和云服务器的区别
0