ubuntu 12.04 core的产生

这篇文件里面,有很多东西是我粘的人家的,出处也没有写清楚,基本交待一下哈。我也没准备把原文出处都列出来了,因为实在不好找啊,就是这么任性了!在Linux下,类似windows下的dump文件,core文件算是程序的一个尸体吧。程序挂都挂了,最好能找到点有用的信息,我反正经验不够丰富,还真没有靠这个解决过什么问题,但相信以后可能还没有点用吧。如果要程序有调试信息,编译程序的时候,要加上-g参数。  core文件仅仅是一个内存映象(有的有调试信息),同时core文件和可执行文件必须匹配才成,到时候挂了,直接把程序从服务器上传下来吧。这个时候源代码怎么办嘞? 我的看法是,把程序放出去之前,把源代码先git一下,保存一个版本,记录下日期吧。默认ubuntu并不产生core,从新安装的一个服务器开始,说一下如何设置吧。

1、永久设置产生core  修改/etc/security/limits.conf文件,在后面增加

*        soft    core           unlimited
*        hard   core           unlimited

在正式运营的时候,如果有coredump之后自动重启的机制,比较容易发生core文件堆满磁盘的情况,小心哈。重启机器后,在终端输入ulimit -c命令可查看core文件的生成大小,若结果为0,则表示关此功能还没有开启,不会生成core文件。我现在想,最好还是不要这么设置,因为容易很多其它程序也产生core,最终将你的磁盘占完。最好是使用那个session,就在那个session打开此功能,使用命令

ulimit -c unlimited

开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可,如:ulimit - c 1024


2、默认情况下,core dump生成的文件名就是简单的“core”,而且就在程序当前目录下。如果程序core dump了多次,新的core会覆盖已存在的core。通过修改/proc/sys/kernel/core_uses_pid文件,可以将进程的pid作为作为扩展名。1表示添加pid作为扩展名,生成的core文件格式为core.xxx,其中xxx即为pid;为0则表示生成的core文件同一命名为core。这在多进程debug的时候,可以迅速定位是哪个进程出了问题。注意  proc  是内存文件,使用vi 是不能 编译的,所有只能使用append 的方式 。/proc  这个目录是虚拟在内存中的,不在硬盘保存。echo "1" > /proc/sys/kernel/core_uses_pid的时候,请使用root账号。


3、通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳.。

echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern ,使用root账号哈。

基本上这些都够了吧,如果这样你的程序挂了,但是没有core文件,这说明,你程序是其它原因挂的,比如没有设置SIGPIPE信号的处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值