abrtd 和 kdump 服务

4 阅读6分钟

abrtd 服务简介

abrtdAutomatic Bug Reporting Tool Daemon 的缩写,是 CentOS、Red Hat Enterprise Linux (RHEL) 和 Fedora 等发行版中的一个 自动化崩溃报告服务。它用于检测系统中发生的程序崩溃,并生成详细的崩溃报告,以便进行问题诊断和调试。


abrtd 服务的功能

  1. 自动捕获崩溃事件

    • abrtd 会在系统运行时持续监控,检测到应用程序或系统组件崩溃时,自动收集崩溃信息。
  2. 生成崩溃报告

    • 生成的崩溃报告包含以下信息:
      • 崩溃时的调用栈(backtrace)。
      • 系统状态和环境信息。
      • 崩溃发生时的相关日志。
  3. 存储崩溃信息

    • 默认情况下,崩溃信息保存在 /var/spool/abrt/ 目录下。
  4. 自动化报告

    • 根据配置,它可以将崩溃报告发送到远程服务器或本地分析工具,如:
      • Red Hat Bugzilla
      • 本地管理员的电子邮件
      • 日志系统

abrtd 服务的相关组件

  • abrt-cli:命令行工具,用于手动管理崩溃报告。
  • abrt-applet:图形界面的崩溃报告工具。
  • abrt-watch-log:监控特定日志文件,捕获崩溃事件。
  • abrt-dump-oops:处理内核崩溃(oops)的工具。
  • abrt-action-analyze-backtrace:用于分析和生成崩溃回溯。

abrtd 服务的管理

1. 检查服务状态

systemctl status abrtd

2. 启动或停止服务

  • 启动服务:
systemctl start abrtd
  • 停止服务:
systemctl stop abrtd
  • 设置开机自启:
systemctl enable abrtd
  • 禁用开机自启:
systemctl disable abrtd

常用命令

  1. 列出所有崩溃报告
abrt-cli list
  1. 查看崩溃报告详细信息
abrt-cli info <crash_id>
  1. 删除崩溃报告
abrt-cli remove <crash_id>
  1. 分析崩溃报告
abrt-cli analyze <crash_id>
  1. 手动创建崩溃报告
abrt-cli report <crash_id>

配置文件

  • 主配置文件位于:
    /etc/abrt/abrt.conf

示例配置选项

[abrtd]
# 允许生成新的崩溃报告
OpenGPGCheck = no
WatchCrashdumpArchive = yes
ProcessUnpackaged = yes
MaxCrashReportsSize = 10000

是否需要启用 abrtd 服务

  • 启用的场景

    • 系统中运行了大量自定义或不稳定的应用程序。
    • 你希望捕获和分析生产环境或开发环境中的崩溃问题。
    • 需要与 Red Hat 提交崩溃报告以获得技术支持。
  • 可以禁用的场景

    • 在生产环境中不需要捕获崩溃日志。
    • 系统资源有限,不希望运行额外的后台服务。

abrtd 服务总结

功能描述
服务名称abrtd
用途捕获和生成程序崩溃报告,便于调试和问题排查。
日志目录/var/spool/abrt/
配置文件/etc/abrt/abrt.conf
是否需要根据需求,开发环境可能需要,生产环境可根据需求选择启用或禁用。

使用场景

工具使用场景
abrtd- 应用程序频繁崩溃,需分析问题。
- 需要开发阶段捕获用户态的错误进行修复。
- 需要将崩溃报告自动发送给开发者或 Bugzilla。
kdump- 系统频繁出现 Kernel Panic,需分析内核级问题。
- 调试和分析涉及 硬件驱动程序内核模块 的问题。
- 生产环境的系统崩溃需要分析内存转储(vmcore)来确定崩溃原因。

abrtd 与 kdump 一起使用

在实际生产环境中,可以同时启用 abrtdkdump

  • abrtd 捕获 用户空间 的崩溃。
  • kdump 捕获 内核空间 的崩溃。

这种组合可以提供完整的崩溃报告体系,帮助运维和开发团队定位和修复从 用户态到内核态 的各种问题。


如何配置和启用 kdump

  1. 安装 kdump 相关工具
sudo yum install kexec-tools
  1. 启用并启动 kdump 服务
sudo systemctl enable kdump
sudo systemctl start kdump
  1. 检查 kdump 是否正常启用
systemctl status kdump
  1. 配置 kdump 内存转储位置

编辑 /etc/kdump.conf 文件,指定内存转储的存储位置:

path /var/crash
  1. 测试 kdump

通过手动触发内核崩溃来测试 kdump 是否生效:

echo c > /proc/sysrq-trigger

⚠️ 注意:此操作会导致系统立即崩溃和重启,请在非生产环境下测试!


总结

  • abrtd 负责捕获 用户态 应用程序的崩溃,适用于开发和测试场景。
  • kdump 负责捕获 内核级崩溃,用于分析 Kernel Panic 和硬件相关问题。
  • 两者可以互补使用,帮助从应用层到内核层进行全面的崩溃分析,提升系统的稳定性和可靠性。

如有其他问题,欢迎继续咨询!### abrtdkdump 的区别

abrtdkdump 都是 Linux 系统中用于 捕获崩溃信息 的工具,但它们的 功能定位捕获对象使用场景 有显著的区别。


abrtdkdump` 的区别

abrtdkdump 都是 Linux 系统中用于 捕获崩溃信息 的工具,但它们的 功能定位捕获对象使用场景 有显著的区别。


特性abrtdkdump
全称Automatic Bug Reporting Tool DaemonKernel Dump
作用捕获 用户空间(User Space)应用程序的崩溃,并生成报告捕获 内核空间(Kernel Space)的崩溃(内核崩溃或 Kernel Panic)
捕获对象用户态的程序崩溃,例如:
- Web 服务器
- 数据库服务
- 应用程序
内核崩溃(Kernel Panic),即 操作系统崩溃,通常是由驱动、硬件问题或内核 Bug 引发
生成的报告- 调用栈 (Backtrace)
- 程序环境信息
- 日志分析
- 内存转储(core dump),即 vmcore 文件
- 内核崩溃时的完整内存映像
报告存储位置/var/spool/abrt//var/crash/(可配置)
处理流程1. 捕获用户程序崩溃
2. 生成崩溃报告
3. 可自动或手动提交到 Bugzilla、邮件等
1. 捕获内核崩溃
2. 重启系统,使用第二个内核收集 vmcore 内存转储
3. 用于后续分析
依赖的服务- abrtd(后台守护进程)
- abrt-cli(命令行工具)
- kdump 服务(守护进程)
- kexec-tools(工具包)
是否需要重启不需要重启系统即可生成崩溃报告需要重启 系统来生成崩溃后的内存转储
适用场景应用程序层面的崩溃排查
用于开发、测试环境,或跟踪生产环境的应用程序故障
内核级崩溃分析
多用于 生产环境,尤其是涉及驱动程序、内核模块或硬件问题的场景
性能影响运行时性能影响较小,后台常驻内存监控用户空间崩溃仅在内核崩溃时启动,占用额外内存来保存内存转储