加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

在linux中core dump开启使用教程

发布时间:2022-06-17 09:11:04 所属栏目:教程 来源:互联网
导读:一、什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文
  一、什么是coredump
 
  我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条件下(这里为什么说需要满足一定的条件呢?下面会分析)会产生一个叫做core的文件。
 
  通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。
 
  二、cored dump开启
 
  执行ulimit –c 检查是否开启core dump,若结果为0,则认为没有启用core dump文件的生成,需要打开core dump 。开启core dump的方法有三种,一种是临时启用,两种是永久启用。
 
  临时启用,方法1,ulimit命令法,执行如下命令:
 
  ulimit -c 1024 或 ulimit -c unlimited
 
  上例中,前一种是限制core dump的文件大小不超过1024K,后一种是不限制core dump文件的大小,现在的程序占用内存都比较凶猛,以前写C程序需要计算内存的时代已经过去了。如果不加限制,可能一个core文件,几个G就出去了。所以最好还是限制该在小。
 
  永久启用的两个方法:
 
  方法二,profile文件修改法:
 
  打开/etc/profile文件,增加如下以下并生使其生效:
 
  ulimit -S -c unlimited > /dev/null 2>&1
 
  注:如果该文件有ulimit -S -c 0 > /dev/null 2>&1 一行,需要先将该行注释掉,设置完成后通过执行 source /etc/profile 生效.
 
  方法三,修改/etc/security/limits.conf文件,找到【* soft core 0】行,将其修改为如下内容:
 
  user soft core 1024 或 @group soft core 1024
 
  这个方法可以针对指定用户或用户组打开core dump,如设置成【* soft core 10485760】,即core dump文件大小是10G.
 
  需要注意的是此处的设置和方法二中的设置是冲突的,在其中一处设置即可,此处建议用第三种方法设置,因为其可以针对不同的用户和组进行设置,更加灵活.
 
  注:上面三种方法设置都不需重启机器,需要做的是退出终端并重新连接,重启需要core dump的程序即可。
 
  三、修改core dump文件格式
 
  定制core的路径,名称格式,通过修改下面两个配置:
 
  echo 1 >/proc/sys/kernel/core_uses_pid
  echo '/corefiles/core-%e-%p-%t' > /proc/sys/kernel/core_pattern
  这里先说下后一参数的配置说明:
 
  %% 单个%字符
  %p 所dump进程的进程ID
  %u 所dump进程的实际用户ID
  %g 所dump进程的实际组ID
  %s 导致本次core dump的信号
  %t core dump的时间 (由1970年1月1日计起的秒数)
  %h 主机名
  %e 程序文件名
  再说下第一句配置,/proc/sys/kernel/core_uses_pid 如果这个文件的内容被配置成1,那么即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID.
 
  需要注意的是,由于/proc下的配置是即时生效的,reboot后,之前的配置就会失效,所以可以增加如下配置到/etc/sysctl.conf文件中,如下:
 
  kernel.core_uses_pid = 1  //phpfensi.com
  kernel.core_pattern = /corefiles/core-%e-%p-%t
  保存后,执行sysctl -p生效.
 
  注:需要注意的是,上面配置的corefiles该目录必须有写权限,否则无法生成core dump文件,可以通过下面的命令创建:
 
  # mkdir /corefiles
  # chmod 777 /corefiles。

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读