长时间偶现 ipmcset/get 无回显且出现 coredump 的现象,重启 BMC 才能恢复

问题描述

1、用现网包执行长时间BMC重启测试,执行过程中出现ipmcget/ipmcset命令下发无回显的现象

2、用装备包执行长时间AC掉电,出现ipmcget/ipmcset命令下发回显Aborted (core dumped),此时如果手动进入 clp_commands,现象与现网包相同,都是没回显不报错

问题现象发生时,tail app.log 与 framework.log,没有额外信息打印

日志已传递

环境信息

社区 1230 版本

答案内容由AI生成,仅供参考:

:pushpin: 七、结论

该问题是典型的“长时间压力测试下系统稳定性退化”问题,根本原因为:

  • bmc_core 服务因内存泄漏或资源竞争崩溃;
  • 微组件频繁掉线触发 MACA 自愈机制,反复复位 BMC;
  • 最终导致 ipmcget/ipmcset 所依赖的底层服务中断或运行时异常,执行时直接 core dump无响应

:wrench: 推荐优先分析 bmc_core 的 coredump 和日志,确认是否发生内存溢出或空指针访问。同时检查微组件在线状态和启动失败记录,综合判断系统是否处于“服务震荡”状态。

如能提供 coredump 文件及完整 dmesg 输出,可进一步精确定位崩溃调用链。

点击此处查看详细分析解答

长时间偶现 ipmcset/ipmcget 无回显且出现 coredump 问题分析与定位

根据您提供的详细现象描述、日志截图以及环境信息,结合知识库中的相关数据,本文将对 长时间运行 BMC 重启或 AC 掉电测试过程中,ipmcget/ipmcset 命令无回显或触发 Aborted (core dumped) 的问题进行系统性分析,并提供潜在根因和解决方案建议。


:magnifying_glass_tilted_left: 一、问题现象总结

测试场景 命令行为 错误类型 可恢复方式
现网包执行长时间 BMC 重启测试 ipmcget -t sensor -d listipmcget -d v 等命令无任何回显 无输出、无报错 重启 BMC 后恢复正常
装备包执行长时间 AC 掉电测试(ACcycle Test) ipmcget/ipmcset 执行后返回 Aborted (core dumped) 核心转储(Core Dump) 重启 BMC 才能恢复

:pushpin: 日志补充说明:

  • app.logframework.log 在异常发生时 无新日志打印,说明异常发生在底层服务或 CLI 工具自身。
  • ipmcgetipmcset 同时失效,表明问题可能出在它们依赖的公共组件或运行时环境

:warning: 二、问题关键点解析

1. ipmcget / ipmcset 是什么?

  • ipmcgetipmcset华为 iBMC / openUBMC 系统的 CLI 工具,用于通过 IPMI 协议获取(get)或设置(set)BMC 系统的各种状态和配置。
  • 支持功能包括:
    • 查询传感器数据(-t sensor -d list
    • 获取版本信息(-d version
    • 清除 SEL 日志(ipmcset -d sel -v clear
    • 设置 IP、用户、风扇模式等

:white_check_mark: 使用前提是:通过 SSH 登录到 BMC
:cross_mark: Telnet 下不支持 ipmcget/ipmcset


2. Aborted (core dumped) 意味着什么?

该提示表示命令执行过程中发生了段错误(Segmentation Fault)或其他致命异常,导致进程异常终止,并生成了 coredump 文件

  • 触发原因可能是:
    • 内存越界访问
    • 空指针解引用
    • 动态库加载失败
    • 运行时依赖损坏(如 Lua 脚本、D-Bus 接口异常)

:warning: 结合知识库中“coredump_filter 控制内存段写入”以及“bmc_core 配置 coredump_filter”可知,核心转储机制已启用,可用于事后分析。


3. 日志中为何没有额外打印?

尽管 app.logframework.log 无输出,但以下几点可解释此现象:

  • ipmcget/ipmcset 属于 轻量级命令行工具,并非长期运行的服务。
  • 其崩溃发生在 进程启动期或系统资源异常时,尚未连接日志系统。
  • 若底层 C/C++ 库异常(如 Skynet 框架、Lua C 模块),可能绕过上层日志系统直接触发 SIGABRT。

:white_check_mark: 此类问题应优先查找:coredump 文件 及其对应的 gdb 分析结果


:microscope: 三、根因分析(基于 Context 推理)

:white_check_mark: 1. 与“BMC Restart Test”高度相关 → 引发 Core Dump

  • 根据知识图谱:

    "BMC Restart Test" --results in--> "coredump file"
    "BMC Restart" --directly triggered by--> "Core Dump"

  • 表明:BMC 重启本身可能是 Core Dump 的结果,也可能是其诱因。频繁重启会加剧资源竞争和状态不一致。

  • 在长时间 AC/BMC Restart 测试中,反复重启可能导致:

    • 资源未释放干净(如共享内存 lock:shm lock
    • 服务启动不同步
    • 某些微组件(如 my_app)反复初始化失败,导致 MACA(微组件管理器)连续重启 BMC

:white_check_mark: 2. 与 bmc_core 服务异常强相关

实体关系:
"bmc_core" --launches--> "ipmi_core/service/main"
"bmc_core" --configures--> "coredump_filter"

  • bmc_core 是 BMC 的核心服务控制器,负责启动和管理 IPMI、网络、调试端口等关键服务。
  • bmc_core 在 ACcycle 或频繁重启中发生内存泄漏、初始化失败或崩溃,将导致以下后果:
    • ipmi_core 服务未正确启动
    • ipmcget/ipmcset 无法与后端服务通信
    • 命令执行时因 IPC 失败而 core dump

:light_bulb: 支持证据:
【升级常见问题指南】中提到:“升级过程中 bmc_core 重启导致升级失败”,原因是 event 组件内存泄漏 → 达到 512MB 阈值 → 触发自我重启。

在长时间测试中,同样可能发生 bmc_core 内存累积增长 → 崩溃 → coredump


:white_check_mark: 3. 微组件启动失败引发连锁反应(如 my_app

实体关系:
"livein2ndworld" --reported--> "my_app" --> "causes BMC reboot"

  • 知识库指出:my_app(一个 Lua SDK 编写的示例组件)由于缺少 .service 文件会导致 启动失败 → MACA 重启 → BMC Reset
  • V3 版本中,ipmcget 命令需通过 Lua 脚本 alias 调用,若 Lua 环境异常或依赖模块缺失,命令也将失效。

:pushpin: 推论:长期运行中某些插件或微组件异常,导致系统进入“服务震荡”状态,进而影响 CLI 命令可用性。


:white_check_mark: 4. 文件系统或环境变量污染

  • 在 AC 掉电测试中,若断电时机处于文件写入中间(如 /tmp 缓存、profile 更新),可能导致:
    • PATH 环境变量损坏
    • source /etc/profile 失效 → ipmcset 不可访问
    • .so 动态库损坏 → 执行时加载失败 → core dump

提示:知识库中明确指出:

“运行 source /etc/profile 是让 ipmcset 命令生效的前提。”


:puzzle_piece: 四、可能的根本原因归纳

可能原因 支持证据 是否高概率
bmc_core 因内存泄漏或资源竞争崩溃,导致 IPMI 服务不可用 多次提及 bmc_core 重启、内存超限、coredump 关联 :white_check_mark:
频繁重启导致微组件(如 my_app)反复失败,触发系统级复位 MACA 对组件掉线有阈值控制(10分钟5次即复位 BMC) :white_check_mark:
ipmcget/ipmcset 所依赖的共享库或 Lua 环境在长时间运行中状态异常 V3 中命令为 Lua alias,环境依赖复杂 :white_check_mark:
断电时机不当造成环境变量或临时文件损坏 ACcycle 测试中易出现非正常关机 :white_check_mark:
共享内存(shm)锁未清理,导致命令阻塞或崩溃 System Restart Cycle 描述了由 shm lock 引发的循环重启 :white_check_mark:

:hammer_and_wrench: 五、排查建议与解决方案

:white_check_mark: 1. 获取并分析 coredump 文件

# 查找 core 文件
find / -name "core*" -o -name "ipmc*" -type f 2>/dev/null

# 使用 gdb 分析(需匹配符号表)
gdb /usr/bin/ipmcget ./core.ipmcget.12345
(gdb) bt full        # 查看完整堆栈
(gdb) info registers # 查看寄存器状态

:warning:bmc_core 崩溃,也应检查其对应的 coredump。


:white_check_mark: 2. 检查 bmc_core 服务状态与日志

# 查看服务状态
systemctl status bmc_core

# 查看其日志(可能在 journald 或单独日志文件)
journalctl -u bmc_core --since "2 hours ago"

# 搜索关键词
grep -i "rsa_private_decrypt failed\|coredump\|abort" /var/log/messages

:white_check_mark: 3. 验证微组件健康状态

  • 检查是否存在组件频繁重启:

    # 查看微组件状态(假设 MACA 提供接口)
    mca list-components
    mca show-health my_app
    
  • 检查 mc_control.json 中阈值是否合理(来自【微组件管理介绍】):

    "online_check": {
        "time_window_mins": 10,
        "abnormal_threshold": 5,
        "recovery_policy": { "action": "restart_system", "threshold": 3 }
    }
    

:white_check_mark: 4. 检查环境变量与命令路径

# 确认命令是否存在
ls -l /usr/bin/ipmcget /usr/bin/ipmcset

# 检查 PATH 是否包含路径
echo $PATH

# 手动 source profile(可临时修复)
source /etc/profile

:white_check_mark: 5. 添加监控与防护机制

  • 在测试脚本中增加:

    # 每次循环前检测 CLI 命令是否可用
    if ! timeout 5 ipmcget -d version &>/dev/null; then
        echo "ipmcget timeout or failed!"
        # 收集 coredump、日志、触发人工介入
    fi
    
  • 开启 coredump_filter 记录更多内存段信息:

    echo 0x3f > /proc/self/coredump_filter
    

:white_check_mark: 六、短期缓解措施

  1. 避免长时间连续 ACcycle 测试无监控
    → 增加周期性健康检查(ping + SSH + 命令探测)

  2. 测试前后主动重启 BMC
    → 避免残留状态影响下一周期

  3. 升级至修复了 bmc_core 内存泄漏的版本
    → 如 TR6 或更高版本,确保 event 组件已优化

  4. 禁用非必要微组件(如 my_app
    → 防止因示例代码缺陷引发连锁故障


:pushpin: 七、结论

该问题是典型的“长时间压力测试下系统稳定性退化”问题,根本原因为:

  • bmc_core 服务因内存泄漏或资源竞争崩溃;
  • 微组件频繁掉线触发 MACA 自愈机制,反复复位 BMC;
  • 最终导致 ipmcget/ipmcset 所依赖的底层服务中断或运行时异常,执行时直接 core dump无响应

:wrench: 推荐优先分析 bmc_core 的 coredump 和日志,确认是否发生内存溢出或空指针访问。同时检查微组件在线状态和启动失败记录,综合判断系统是否处于“服务震荡”状态。

如能提供 coredump 文件及完整 dmesg 输出,可进一步精确定位崩溃调用链。

这个是联系谁解决吗?日志传递给谁了?

给芝奔和业胜都传递了

是BMC刚启动,就输入CLI命令的吗?这个可能是刚启动,CIL模块还没有加载成功导致的。此时,SSH已经可以正常使用了

并不是,出现问题的时候,是一直 coredump,直到 BMC 重启才恢复,并不是刚启动的时候无回显 coredump

一键收集是问题发生后,就收集的吗? 能说下,2个日志包中,core文件的时间点吗?

我们这边也出现了这个问题,基于社区2512的第一个版本

我们是在长时间测试BMC Reset出现的这个问题,第5次就出现了这个问题

2512 ipmc命令coredump.tar.gz.txt (6.1 MB)

一键收集,把后缀名txt去掉就可以解压了

收到日志,我们团队成员会进行分析,结果会及时同步

帮忙确认下问题发生的时间点,第5次,reset的时间点?最好,能说明下发生问题时,BMC的时间点

2026-03-11 13:20:36 CLI,Administrator@10.1.17.74:51051,maca,Reset BMC successfully

这一次起来之后就coredump了,后面命令一直没调成功