热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用systemdcoredump调试应用程序崩溃

使用systemd-coredump调试应用程序崩溃systemd-coredump收集并显示内核核心转储,以分析应用程序崩溃。当某个进程崩溃(或所有

使用systemd-coredump调试应用程序崩溃

systemd-coredump收集并显示内核核心转储,以分析应用程序崩溃。当某个进程崩溃(或所有属于某个应用程序的进程)时,其默认设置是将核心转储记录到日志中(systemd如果可能的话包括回溯),并将核心转储存储在中的文件中 /var/lib/systemd/coredump。您还可以选择使用其他工具(例如gdbcrash) 检查转储文件(请参见第17.8节“分析故障转储”)。可以选择不存储核心转储,而仅记录日志,这对于最大程度地减少敏感信息的收集和存储很有用。

使用和配置

systemd-coredump并且默认情况下可以运行。默认配置在/etc/systemd/coredump.conf:

[Coredump]
#Storage=external
#Compress=yes
#ProcessSizeMax=2G
#ExternalSizeMax=2G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=

下面的示例显示了如何通过创建段错误来生成日志条目和核心转储,从而将Vim用于简单测试。

用VIM创建一个核心转储

  1. 启用debuginfo-pooldebuginfo-update存储库

  2. 安装 vim-debuginfo

  3. 启动vim testfile并输入几个字符

  4. 获取PID并生成段错误:

    tux > ps ax | grep vim
    2345 pts/3 S+ 0:00 vim testfile root # kill -s SIGSEGV 2345

    Vim将发出错误消息:

    Vim: Caught deadly signal SEGV
    Vim: Finished.
    Segmentation fault (core dumped)

  5. 列出您的核心转储,然后检查它们:

    root # coredumpctl
    TIME PID UID GID SIG PRESENT EXE
    Wed 2019-11-12 11:56:47 PST 2345 1000 100 11 * /bin/vimroot # coredumpctl info
    PID: 2345 (vim)
    UID: 0 (root)
    GID: 0 (root)
    Signal: 11 (SEGV)
    Timestamp: Wed 2019-11-12 11:58:05 PST
    Command Line: vim testfile
    Executable: /bin/vim
    Control Group: /user.slice/user-1000.slice/session-1.scopeUnit: session-1.scopeSlice: user-1000.sliceSession: 1Owner UID: 1000 (tux)Boot ID: b5c251b86ab34674a2222cef102c0c88Machine ID: b43c44a64696799b985cafd95dc1b698Hostname: linux-uochCoredump: /var/lib/systemd/coredump/core.vim.0.b5c251b86ab34674a2222cef102Message: Process 2345 (vim) of user 0 dumped core.Stack trace of thread 2345:#0 0x00007f21dd87e2a7 kill (libc.so.6)#1 0x000000000050cb35 may_core_dump (vim)#2 0x00007f21ddbfec70 __restore_rt (libpthread.so.0)#3 0x00007f21dd92ea33 __select (libc.so.6)#4 0x000000000050b4e3 RealWaitForChar (vim)#5 0x000000000050b86b mch_inchar (vim)
    [...]

当您有多个核心转储时,将coredumpctl info 全部显示。用PID,COMM(命令)或EXE(可执行文件的完整路径)过滤它们, 例如,Vim的所有核心转储:

root # coredumpctl info /bin/vim

通过以下方式查看单个核心转储PID:

root # coredumpctl info 2345

将选定的核心输出到gdb:

root # coredumpctl gdb 2345

PRESENT列中 的星号表示存在已存储的核心转储。如果该字段为空,则不会存储任何核心转储,而是coredumpctl从日志中检索崩溃信息。您可以配置/etc/systemd/coredump.conf通过以下 Storage选项控制此行为 :

  • Storage=none, 核心转储记录在日志中,但不存储。这有助于最大限度地减少敏感信息的收集和存储,例如,符合通用数据保护法规(GDPR)。
  • Storage=external, 核心存储在 /var/lib/systemd/coredump
  • Storage=journal, 核心存储在 systemd 日志中

systemd-coredump每个核心转储都会调用 一个新的实例,因此配置更改将在下一个核心转储中应用,并且无需重新启动任何服务。

系统重新启动后,将不保留核心转储。您可以使用将它们永久保存coredumpctl。以下示例按进行过滤,PID并将内核存储在中 vim.dump:

root # coredumpctl -o vim.dump dump 2345

有关完整的命令和选项列表,请参见man systemd-coredump,man coredumpctlman coredump.conf

原文链接地址: https://documentation.suse.com/sles/15-SP1/html/SLES-all/cha-tuning-systemd-coredump.html


推荐阅读
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Linux 中使用 clone 函数来创建线程
    2019独角兽企业重金招聘Python工程师标准Linux上创建线程一般使用的是pthread库实际上libc也给我们提供了创建线程的函数那就是cloneintclone(i ... [详细]
  • MySQL千万级数据的大表优化解决方案【mysql特性】
    mysql数据库中的表数据量几千万后,查询速度会很慢,日常各种卡慢,严重影响使用体验。在考虑升级数据库或者换用大数据解决方案前,必须优化现有mysql数据库 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • java开发公众号,java自学网公众号
    本文目录一览:1、JAVA微信公众号开发回复消息能回复多条吗?具体怎么代码实现? ... [详细]
  • 主线:设计窗口类注册窗口类产生窗口显示窗口更新窗口消息循环(将消息路由到窗口中去处理)。APPMODUL.CPP源文件被编译链接进入项目,从APPMOD ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
author-avatar
懿切瀡纟彖_639
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有