龙叔Linux:abrt-hook-ccpp

1、什么是abrt-hook-ccpp

abrt也可以叫abrtd,展开应该是automatically bug report daemon,也就是自动错误报告守护进程。
从字面意义就可以看出,他是一个守护进程,监控进程,如果进程出现崩溃,那么他就会开始工作,收集bug,收集现场。用于在发生崩溃时报告软件包中的错误

2、abrt配置文件解析

2.1、配置文件abrt.conf

配置文件完整路径:
/etc/abrt/abrt.conf

a、MaxCrashReportsSize
控制dump的最大size,如果程序崩溃也不产生dump文件,那可以试试将这个配置项改为0,无限制

b、DumpLocation
存放dump文件的目录,默认是/var/spool/abrt,当abrt工作时,会创建对应的dump文件目录

c、WatchCrashdumpArchiveDir
如果你想让abrtd自动解包出现在这个目录下的crashdump 包,启用此选项,并制定这个目录,默认是/var/spool/abrt-upload

d、DeleteUploaded
如果想要自动清除上传目录,必须调整selinux策略,默认是no

e、AutoreportingEvent
配置的是事件的名称,在检测到问题后自动运行这个事件。该事件应该执行一些快速分析,如果知道问题,则将以70退出。默认是report_uReport,并且如果想启用这个,AutoreportingEnabled需要配置为yes

f、AutoreportingEnabled
启用自动运行在AutoreportingEvent选项中配置的事件。默认为no

g、ShortenedReporting
在AutoreportingEvent完成后,启用缩短的GUI报告,默认为yes

h、PrivateReports
默认值为yes,如果你想允许普通用户有文件系统权限读取存储在DumpLocation的问题数据。那就设置为no。
问题数据包含/var/log/messages, dmesg和sosreport数据的摘要,由abrtd生成在用户根下。

i、DebugLevel
允许ABRT工具检测ABRT本身的问题。通过增加该值,可以强制ABRT检测、处理和报告ABRT中的问题。但是,在处理自身引起的问题时,ABRT可能会陷入无限循环。默认值是0(non debug mode)

2.2、配置文件abrt-action-save-package-data.conf

配置文件完整路径:
/etc/abrt/abrt-action-save-package-data.conf

a、OpenGPGCheck
只分析签名包中的崩溃,默认为yes

b、BlackList
列入黑名单的包,默认值是“nspluginwrapper, valgrind, strace, mono-core“

c、ProcessUnpackaged
处理不属于任何包的可执行文件中的崩溃?默认是no,有时候有些进程崩溃但是没有产生dump文件,可以把这个改成yes再试试。

d、BlackListedPaths
可执行路径黑名单(shell模式)
默认值是“/usr/share/doc/, /example, /usr/bin/nspluginviewer, /usr/lib/xulrunner-/plugin-container”

e、Interpreters
编译器,默认值是“python2, python2.7, python, python3, python3.3, perl, perl5.16.”

3、问题案例分享

3.1、问题现象

服务器出现两个告警
a、根目录磁盘空间告警
b、服务器内存使用率告警

在这里插入图片描述

3.2、问题定位

a、内存问题定位:
top命令 发现有三个abrt-hook-ccpp进程消耗资源非常大
在这里插入图片描述
b、根目录磁盘空间使用率问题定位:
从根目录一路使用”du ./ --max-depth=1”,找到占用空间最大的目录是/var/spool/abrt
在这里插入图片描述

c、确定原因
于是可以看出不管是磁盘空间使用正常还是内存使用突增,都是和abrt-hook-ccpp有关系

在messages日志中可以搜索abrt关键字,可以看到是 三个 vim 进程奔溃导致拉起的abrt-hook-ccpp
在这里插入图片描述

而abrt-hook-ccpp产生的目录名后面的数字也正是对应崩溃程序的进程ID,搜索之后发现是vim进程
aaa

本次问题是有人使用vim查看日志文件,而文件过大,vim崩溃导致

3.3、问题处理

解决方法很简单,kill掉三个vim进程就可以了,kill掉之后,三个abrt-hook-ccpp进程也消失了,abrt-hook-ccpp产生的文件也消失了

不过为了避免再次发生这样的事情,可以关闭abrt-hook-ccpp

systemctl stop abrt-ccpp.service
systemctl disable abrt-ccpp.service
systemctl status abrt-ccpp.service

-----------------------本文完

欢迎关注我的公众号:龙叔运维
持续分享运维经验

`/usr/libexec/abrt-hook-ccpp` 是一个用于处理 C/C++ 程序崩溃(即段错误或异常终止)时生成核心转储文件的钩子程序。它是 ABRT(Automatic Bug Reporting Tool)框架的一部分,负责在程序崩溃时触发 ABRT 的报告和分析机制。通过配置 `kernel.core_pattern` 参数,可以将系统的核心转储事件指向此脚本,从而实现自动化的错误捕获与记录[^3]。 ### 配置方法 要使用 `abrt-hook-ccpp` 处理核心转储事件,需要修改内核参数 `kernel.core_pattern`,使其指向 `/usr/libexec/abrt-hook-ccpp` 脚本,并传递相应的格式化参数。常见的配置如下: ```bash echo '|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h' > /proc/sys/kernel/core_pattern ``` 上述命令中,各参数含义如下: - `%s`: 信号编号。 - `%c`: 核心转储大小限制。 - `%p`: 进程 ID。 - `%u`: 用户 ID。 - `%g`: 组 ID。 - `%t`: 时间戳。 - `%P`: 可执行文件路径。 - `%I`: 容器 ID(如果适用)。 - `%h`: 主机名。 为了使该配置在系统重启后仍然生效,建议将其写入 `/etc/sysctl.conf` 或创建一个新的 `.conf` 文件在 `/etc/sysctl.d/` 目录下,例如: ```bash kernel.core_pattern = |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h ``` 然后运行以下命令应用配置: ```bash sysctl -p ``` ### 使用方法 一旦配置完成,当系统中有 C/C++ 程序崩溃时,`abrt-hook-ccpp` 将被调用以捕获核心转储并启动 ABRT 的错误报告流程。ABRT 会收集相关日志、堆栈跟踪等信息,并生成一个错误报告,存储在 `/var/spool/abrt/` 目录下。用户可以通过 `abrt-cli` 命令行工具查看和管理这些报告,例如: ```bash abrt-cli list ``` 这将列出所有由 ABRT 捕获的错误事件。若需进一步分析某个特定事件,可以使用以下命令: ```bash abrt-cli info <event_id> ``` 其中 `<event_id>` 是要查看的错误事件标识符。 ### 关闭 abrt-hook-ccpp 如果不再需要 `abrt-hook-ccpp` 来处理核心转储,可以选择关闭其服务: ```bash systemctl stop abrt-ccpp.service systemctl disable abrt-ccpp.service systemctl status abrt-ccpp.service ``` 这些命令将停止服务、禁用开机自启,并显示当前服务状态[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙叔运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值