Linux core dump 分析及相关调试

core是core dump文件,是linux服务器的一种机制。core是个程序的严重问题,会致使程序直接挂掉,需要恢复。

需要注意的东西

在程序挂掉的过程中,会纪录程序的内存信息和cpu调用堆栈信息,当程序占用大量内存的时候,比如40G,那core文件可能会达到60G多,那写文件会持续数十分钟,这么长时间流量都会损失,并且写大文件对wio的占用特别大,严重影响本台服务器的其他服务,对于在线服务,会用很多超时,或者严重的是一段时间无法提供服务。所以,core文件监控,大小控制也很重要。

产生的原因

core文件产生原因很多,有主动core 请求的,也有是程序的非法操作导致os发送sigsegv相关的信号。
主动core的方法:
1)程序在运行中,需要查看里面的进程或者线程的运行情况,主动生成core。
先gdb attach 进程号
再使用generatercore命令产生core
2)发出kill 命令
被动core:
这个是由于程序的非法操作,比如非法写内存,非法读等触发os的保护程序,由os发出相关信号给程序,导致程序core掉。

core相关设置

1)修改/proc/sys/kernel/core_pattern文件,

此文件用于控制Core文件产生的文件名,默认情况下,此文件内容只有一行内容:“core”,此文件支持定制,一般使用%配合不同的字符,这里罗列几种:

%p  出Core进程的PID
%u  出Core进程的UID
%s  造成Core的signal号
%t  出Core的时间,从1970-01-0100:00:00开始的秒数
%e  出Core进程对应的可执行文件名
2)ulimit -c 此命令可以显示当前OS对于Core文件大小的限制,如果为0,则表示不允许产生Core文件。如果想进行修改,可以使用
ulimit -c  n   n表示core文件大小限制
ulimit -c unlimited 不限制大小

core的用途

core文件相当有用, core文件相当于是保存程序出错误的现场给程序员进行调试,找问题。它会保存程序的调用堆栈信息,内存信息及CPU使用的信息等。

调试技术

使用gdb调试:

gdb 程序 core
使用bt查看堆栈
使用info threads查看线程信息
thread n跳到对应的线程里面去,进行调试
f n 跳到相应的堆栈里面去
p 打印变量


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。