core dump 路径定义以及监控

这篇具有很好参考价值的文章主要介绍了core dump 路径定义以及监控。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Core Dump 是什么?

Core Dump 是指进程异常退出时,操作系统将进程的内存状态保存到文件中,这个文件就是 Core Dump 文件,中文一般翻译为“核心转储”,哈,看起来还不如不翻译。

我们可以认为 Core Dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。

Core Dump 有什么用?

一个是用于排查问题,例如程序 crash 了,我们可以通过 gdb 等工具来分析 core dump 文件,找到问题的原因。另一个是监控,我们可以通过监控手段及时发现程序 crash 了,及时处理。

程序自身产生的 Core Dump 文件一般可以用来分析程序运行到哪里出错了。

Linux 平台常用的 coredump 文件分析工具是 gdb;Solaris 平台用 pstack 和 pflags;Windows 平台用 userdump 和 windbg。

测试生成 Core Dump 文件

[root@VM-0-33-debian:~# cd /home/user
[root@VM-0-33-debian:~# ulimit -c unlimited
[root@VM-0-33-debian:~# kill -s SIGSEGV $$

这将会在你当前的 shell 下触发一个段错误,进而生成一个 core dump 文件,文件名为 core 或 core.pid,pid 是当前 shell 的进程号。

注意,ulimit -c unlimited 是告诉操作系统,不要限制 core dump 文件的大小,如果你执行 ulimit -c 看到输出 0,就表示 core dump 文件大小限制为 0 了,也就不会生成。比如我的机器环境:

[root@VM-0-33-debian:~# ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 30148
max locked memory           (kbytes, -l) 969535
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1024
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 30148
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

注意 core file size 那一行,我的环境是 0,就表示限制了 core dump 文件的生成。

Core Dump 文件路径定义

在 Linux 下,core dump 文件的路径是由 /proc/sys/kernel/core_pattern 定义的,如果这个文件不存在,或者内容为空,那么 core dump 文件就会生成在当前目录下。

[root@VM-0-33-debian:~# cat /proc/sys/kernel/core_pattern
core

上面的输出表示,core dump 文件会生成在当前目录下,文件名为 core。

我们可以通过修改 /proc/sys/kernel/core_pattern 来定义 core dump 文件的路径和文件名,例如:

[root@VM-0-33-debian:~# mkdir -p /tmp/cores
[root@VM-0-33-debian:~# chmod a+rwx /tmp/cores
[root@VM-0-33-debian:~# echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern

然后,我们重新生成 core dump 文件:

[root@VM-0-33-debian:~# cd /home/user
[root@VM-0-33-debian:~# ulimit -c unlimited
[root@VM-0-33-debian:~# kill -s SIGSEGV $$

此时,我们会生成一个类似这样的文件:/tmp/cores/core.bash.8539.VM-0-33-debian.1236975953。其中,bash 是进程名,8539 是进程号,VM-0-33-debian 是主机名,1236975953 是时间戳。文件存储在 /tmp/cores 目录下。

对于 core_pattern 的定义,可以使用如下的占位符:

%p: pid
%: '%' is dropped
%%: output one '%'
%u: uid
%g: gid
%s: signal number
%t: UNIX time of dump
%h: hostname
%e: executable filename
%: both are dropped

其中,%h hostname 最好加上,假如我们把 core dump 文件存放在 NFS 上,就可以用 %h 来区分 core dump 文件来自哪个机器了。

echo "/tmp/cores/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern 这种设置方式,是临时生效,如果机器重启,就会失效。如果想要永久生效,可以修改 /etc/sysctl.conf 文件,添加一行:

# Own core file pattern...
kernel.core_pattern=/tmp/cores/core.%e.%p.%h.%t

然后执行 sysctl -p 命令,使配置生效。

Core Dump 文件监控

一般来讲,对于规范化做的好的公司,core_pattern 是系统部交付机器的时候,统一设置好的,公司所有的机器的 core_pattern 都是一致的,会设置成一个统一的目录,例如 /opt/cores,这样就可以方便地对 core dump 新文件进行监控了。

这里,推荐大家使用 catpaw(基本介绍参考这里:太卷了,史上最简单的监控系统 catpaw 简介),catpaw 从 v0.3.0 版本开始,引入了 mtime 监控插件,可以监控近期的文件变更,进而监控新的 core dump 文件的产生。

mtime 插件的配置如下:

[[instances]]
time_span = "3m"
directory = "/opt/cores"
check = "file changed or created"
interval = "30s"

[instances.alerting]
## Enable alerting or not
enabled = true
## Same functionality as Prometheus keyword 'for'
for_duration = 0
## Minimum interval duration between notifications
repeat_interval = "5m"
## Maximum number of notifications
repeat_number = 3
## Whether notify recovery event
recovery_notification = true
## Choice: Critical, Warning, Info
default_severity = "Warning"

上面的意思表示,每 30s 探测一次,每次探测最近 3 分钟内是否有文件变更或新文件产生。比如我随便对某个目录做了测试,最终输出的内容长这个样子:

总结

希望本文介绍的内容对你有帮助,愿不吝点赞、在看。如果有其他这类事件监控的场景需求,也可以联系我,后面都会一并做到 catpaw 里。

虽然 FlashDuty 有免费套餐,如果就是不想用,也可以模仿 FlashDuty 的事件接收接口自己搞个 HTTP Server,接收 catpaw 的事件推送,然后自己处理,比如发送到钉钉、飞书、邮件等。

enjoy...make a better world 😃文章来源地址https://www.toymoban.com/news/detail-481081.html

到了这里,关于core dump 路径定义以及监控的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 中 core dump 文件的作用和使用方法

    Core dump 文件是指在程序崩溃或异常结束时,操作系统将程序的内存信息、寄存器状态、堆栈信息等保存到文件中以便进行调试和分析的文件。Core dump 文件通常包含了程序崩溃时的全部状态信息,可以帮助程序员快速定位程序崩溃的原因并进行修复。 core dump文件主要包含了用

    2024年02月03日
    浏览(37)
  • 『C/C++养成计划』Linux遇到Aborted (core dumped)的处理方法

    C++项目遇到Aborted (core dumped)的处理方法 Core Dump 是一个运行时错误。 Core 的意思是内存, Dump 的意思是扔出来, 堆出来。在开发(或使用)一个程序时,有时程序莫名其妙的 down 了, 却没有任何的提示(有时候会提示 core dumped )。虽然系统没事,但我们下次仍可能遇到相同的问题。这

    2023年04月09日
    浏览(36)
  • 【Linux】调试常见的应用程序奔溃“Segmentation fault (core dumped)”

    Linux程序开发者,日常遇到程序奔溃时,应该如何调试,如何寻找原因和解决呢?本文就介绍了遇到Segmentation fault (core dumped)问题时最常规的定位方法。 当你在命令行执行一个程序时,遇到Segmentation fault (core dumped)后,第一时间查看当前目录下是否产生了core-xxxxx文件。 如果没

    2024年02月10日
    浏览(47)
  • 问题记录 | 执行python命令报错 713011 segmentation fault (core dumped) python

    最近在看DALLE2模型,新建conda虚拟环境之后使用命令 pip install dalle2_pytorch 安装,然后在MobaXterm中执行python命令,报错 但是在vscode中同样的命令能够顺利执行

    2024年02月13日
    浏览(37)
  • 【Q&A】Python代码调试之解决Segmentation fault (core dumped)问题

    Python3执行某一个程序时,报Segmentation fault (core dumped)错,且没有其他任何提示,无法查问题。 Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题

    2023年04月21日
    浏览(39)
  • 【c++ debug】core dump调用栈不显示行号 & no debugging symbols found

    1. 问题 问题1 gdb ./project显示没有debug符号 Reading symbols from project_name (no debugging symbols found) …done 问题2 core dump调用栈不显示行号 … #1 0x00007ffff70ac795 in feature() const at /xxx/.so_path/xxx/project.so 2. 原因 编译没有加 -g 选项。-g用于gdb调试 3. 解决方法 CMakeLists.txt加编译选项 -g 4. 修改后

    2023年04月09日
    浏览(32)
  • 【Linux】进程信号篇Ⅰ:信号的产生(signal、kill、raise、abort、alarm)、信号的保存(core dump)

    kill -l 可以查看所有信号: 其中,前面的数字就是信号,后面的大写英文就是信号名称,实际就是宏。 我们需要关注的是 1~31 号普通信号,关注他们有没有产生(可以用 0 或者 1 表示)。 所以,进程的 pcb 中,需要对产生的信号先用 位图 保存起来,再按照一定的顺序去处理

    2024年01月25日
    浏览(37)
  • 从小白到大神之路之学习运维第64天--------Zabbix监控mysql、ftp服务以及自定义配置

    第三阶段基础 时  间:2023年7月19日 参加人:全班人员 内  容: Zabbix监控mysql、ftp服务以及自定义   目录 一、Zabbix监控mysql数据库 二、Zabbix监控ftp服务 三、Zabbix自定义监控项       整体zabbix搭建完成,server端huyang1监控自己以及监控huyang3,切基于lamp平台,服务均开启 服

    2024年02月16日
    浏览(58)
  • Linux下ROS程序崩溃,程序段错误process has died [pid 20083, exit code -11, cmd /home GDB core dump 调试

           在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息。 core dump叫做核心转储 ,当程序运行过程中发生异常的那一刻的一个内存快照,操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态

    2024年02月12日
    浏览(46)
  • Windows下关于windbg 调试 dump文件过程的环境配置以及注意事项

    在windows下,异常的调试很便捷,除了使用vs调试外还可以使用微软的windbg,windbg一般在安装vs的时候可以选装(windows开发套件),如果你是使用vs的开发者,那可以去磁盘中搜索windbg.exe看看有没有在安装vs的时候安装windbg,如图: 如果没有安装windbg也没关系,可以去微软的官网下载 下载

    2024年02月09日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包