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 打印变量