Linux core dump 分析及相关调试
core是core dump文件,是linux服务器的一种机制。core是个程序的严重问题,会致使程序直接挂掉,需要恢复。
需要注意的东西
在程序挂掉的过程中,会纪录程序的内存信息和cpu调用堆栈信息,当程序占用大量内存的时候,比如40G,那core文件可能会达到60G多,那写文件会持续数十分钟,这么长时间流量都会损失,并且写大文件对wio的占用特别大,严重影响本台服务器的其他服务,对于在线服务,会用很多超时,或者严重的是一段时间无法提供服务。所以,core文件监控,大小控制也很重要。
产生的原因
core文件产生原因很多,有主动core 请求的,也有是程序的非法操作导致os发送sigsegv相关的信号。主动core的方法:1)程序在运行中,需要查看里面的进程或者线程的运行情况,主动生成core。先gdb attach 进程号再使用generatercore命令产生core2)发出kill 命令被动core:这个是由于程序的非法操作,比如非法写内存,非法读等触发os的保护程序,由os发出相关信号给程序,导致程序core掉。core相关设置
1)修改/proc/sys/kernel/core_pattern文件,%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 打印变量
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。