CoreDump设置方式

作者: QuietHeart | 来源:发表于2020-12-04 17:51 被阅读0次

    本文讲述利用coredump调试时,对coredump信息相关的设置方式。

    设置core文件大小

    • 列出所有资源的限制

      #ulimit -a
      1240
      
    • 查看core file size

      #ulimit -c
      

      这里对于 core file size:

      unlimited:core文件的大小不受限制
      0:程序出错时不会产生core文件
      1024:代表1024k,core文件超出该大小就不能生成了
      
    • 设置core文件大小

      #ulimit -c fileSize
      

      注意:尽量将这个文件大小设置得大一些,程序崩溃时生成Core文件大小即为程序运行时占用的内存大小。可能发生堆栈溢出的时候,占用更大的内存

    查看CoreDump文件路径配置

    • 方法1:

      #cat /proc/sys/kernel/core_pattern
      
    • 方法2:

      #/sbin/sysctl kernel.core_pattern
      

    修改core dump文件路径

    • 方法1-临时修改

      修改 /proc/sys/kernel/core_pattern 文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。

      例如:

      #echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern
      
    • 方法2:永久修改

      使用 sysctl -w name=value 命令。

      例如:

      #sysctl -w kernel.core_pattern=/var/log/%e.core.%p
      

    另外,为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命名:

    %% 单个%字符
    %p 所dump进程的进程ID
    %u 所dump进程的实际用户ID
    %g 所dump进程的实际组ID
    %s 导致本次core dump的信号
    %t core dump的时间 (由1970年1月1日计起的秒数)
    %h 主机名
    %e 程序文件名
    

    测试是否能生成core文件

    首先,向目标进程发送信号产生coredump

    #kill -s SIGSEGV $$
    

    这里,使用当前进程的进程号,即 $$

    其次,根据前面配置的文件路径,查看对应目录下是否生成了coredump文件

    参考

    • https://www.cnblogs.com/xiaodoujiaohome/p/6222895.html

    • https://www.jianshu.com/p/dc7e7bd7d1a2

    • linux下生成core dump文件方法及设置

      登陆 LINUX 服务器,任意位置键入
      echo "ulimit -c 1024" >> /etc/profile
      退出 LINUX 重新登陆 LINUX
      键入 ulimit -c
      如果显示 1024 那么说明 coredump 已经被开启。
      1024 限制产生的 core 文件的大小不能超过 1024kb,可以使用参数unlimited,取消该限制
      ulimit -c unlimited
      
      
       . 设置 Core Dump 的核心转储文件目录和命名规则
       /proc/sys/kernel/core_uses_pid 可以控制产生的 core 文件的文件名中是否添加 pid 作为扩展 ,如果添加则文件内容为 1 ,否则为 0
       proc/sys/kernel/core_pattern 可以设置格式化的 core 文件保存位置或文件名 ,比如原来文件内容是 core-%e
       可以这样修改 :
       echo "/corefile/core-%e-%p-%t" > core_pattern
       将会控制所产生的 core 文件会存放到 /corefile 目录下,产生的文件名为 core- 命令名 -pid- 时间戳
      
      
      ulimit -c unlimited
      echo "/tmp/core-%e-%p" > /proc/sys/kernel/core_pattern
      gcc -o main -g a.c
      gdb main /tmp/core-main-10815
      
    • https://blog.csdn.net/u011417820/article/details/71435031

      1.设置core文件大小
      列出所有资源的限制: ulimit -a
      1240
      ulimit -a.png
      或者查看core file size: ulimit -c
      
      core file size:
      unlimited:core文件的大小不受限制
      0:程序出错时不会产生core文件
      1024:代表1024k,core文件超出该大小就不能生成了
      设置core文件大小: ulimit -c fileSize
      
      注意:
      尽量将这个文件大小设置得大一些,程序崩溃时生成Core文件大小即为程序运行时占用的内存大小。可能发生堆栈溢出的时候,占用更大的内存
      
      
      2.设置core文件的名称和文件路径
      默认生成路径:输入可执行文件运行命令的同一路径下
      默认生成名字:默认命名为core。新的core文件会覆盖旧的core文件
      a.设置pid作为文件扩展名
      
      1:添加pid作为扩展名,生成的core文件名称为core.pid
      0:不添加pid作为扩展名,生成的core文件名称为core
      修改 /proc/sys/kernel/core_uses_pid 文件内容为: 1
      修改文件命令: echo "1" > /proc/sys/kernel/core_uses_pid
      或者
      sysctl -w kernel.core_uses_pid=1 kernel.core_uses_pid = 1
      b. 控制core文件保存位置和文件名格式
      
      修改文件命令: echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
      或者:
      sysctl -w kernel.core_pattern=/corefile/core-%e-%p-%t kernel.core_pattern = /corefile/core-%e-%p-%t
      可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳
      以下是参数列表:
      %p - insert pid into filename 添加pid(进程id)
      %u - insert current uid into filename 添加当前uid(用户id)
      %g - insert current gid into filename 添加当前gid(用户组id)
      %s - insert signal that caused the coredump into the filename 添加导致产生core的信号
      %t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
      %h - insert hostname where the coredump happened into filename 添加主机名
      %e - insert coredumping executable name into filename 添加导致产生core的命令名
      
      3.测试是否能生成core文件
      kill -s SIGSEGV $$
      查看/corefile目录下是否生成了core文件
      
    • https://blog.csdn.net/yasi_xi/article/details/16118349

      最近遇到一个问题,SUSE Linux系统中的某个应用程序异常而最终引发了系统core dump,但遗憾的时在系统重启后并没有找到core文件,影响了我们对问题的分析定位。
      
      经过分析发现系统默认的core文件生成路径是/var/logs,但/var/logs目录并非系统自带的,系统初始安装默认自带的是/var/log,最终导致该系统出现core dump后并没能生成core文件,因此如何查询和修改系统默认的core dump文件生产路径呢?方法如下:
      
      一. 查询core dump文件路径:
      方法1:
      # cat /proc/sys/kernel/core_pattern
      
      方法2:
      # /sbin/sysctl kernel.core_pattern
      
      二. 修改core dump文件路径:
      方法1:临时修改:修改/proc/sys/kernel/core_pattern文件,但/proc目录本身是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。
      /proc/sys/kernel/core_pattern
      例:echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern
      
      方法2:永久修改:使用sysctl -w name=value命令。
      例:/sbin/sysctl -w kernel.core_pattern=/var/log/%e.core.%p
      
      为了更详尽的记录core dump当时的系统状态,可通过以下参数来丰富core文件的命名:
      %% 单个%字符
      %p 所dump进程的进程ID
      %u 所dump进程的实际用户ID
      %g 所dump进程的实际组ID
      %s 导致本次core dump的信号
      %t core dump的时间 (由1970年1月1日计起的秒数)
      %h 主机名
      %e 程序文件名

    相关文章

      网友评论

        本文标题:CoreDump设置方式

        本文链接:https://www.haomeiwen.com/subject/amfiwktx.html