• core文件的产生和使用


    最近公司一个用golang写的restful服务突然出现了core,最终查到的原因是,golang程序在运行的时候系统启动另一个占用内存比较大的程序,导致系统内存不足(out of memory),启动了OOM,golang程序被异常杀掉,产生了core文件。第一次排查core的问题,作此记录。

    core文件产生原因

    在程序奔溃时,内核会生成一个core文件,即程序最后 奔溃的内存映像,和程序调试信息。之后可以通过gdb,打开core文件查看程序奔溃时的堆栈信息,可以找出程序出错的代码所在文件和函数。

    core文件调试

    gdb ./test core.123 (test为产生core的可执行程序,core.123为该程序产生的core文件)

    core文件的生成开关和大小限制

    1. 使用ulimit -a命令,可以查看core文件的生成开关和大小限制所有信息
    2. 使用umlimt -c 命令可查看core文件的生成开关。若结果为0,则表示关闭了 此功能,不会生成core文件
    3. 使用ulimt -c filesize命令,可以限制core文件的大小(filesize的单位为kbyte)。若ulimit -c unlimited,则表示core文件的大小不受限制。

    core文件的名称和生成路径

    若未设置core文件生成路径和名称,默认生成在可执行文件运行命令的同一路径下,命名为core。新的core文件生成将覆盖原来的core文件。

    1. core文件保存位置和文件名设置,通过编辑proc/sys/kernel/core_pattern,设置文件路径和文件名

    echo "/corefile/core-%e-%p-%t" > core_pattern

    所产生的core文件会存放在/corefile目录下,产生的文件名为core-命令名-pid-时间戳

    文件名参数列表:

    %p - insert pid into filename 添加 pid

        %u - insert current uid into filename 添加当前 uid

        %g - insert current gid into filename 添加当前 gid

        %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 添加命令名

  • 相关阅读:
    PAT A1017 Queueing at Bank [硬核模拟]
    PAT A1105 Spiral Matrix [硬核模拟]
    PAT A1153 Decode Registration Card of PAT [排序模拟]
    PAT A1139 First Contact [图]
    jquery的animate动画
    wordpress建站过程5——footer.php
    wordpress建站过程4——index.php
    wordpress建站过程3——header.php
    HTML中加载flash方法
    轮播图的原理
  • 原文地址:https://www.cnblogs.com/wuyepeng/p/12545618.html
Copyright © 2020-2023  润新知