问题描述
脚本轮询sensor和fan信息,产生了NAND flash写入过多告警
重现步骤
期望结果
没有写入过多告警
实际结果
尝试过的解决方案
收集日志查看,大量cli超时日志打印刷屏
答案内容由AI生成,仅供参考:
脚本高频轮询 + 同步日志写入 是导致 NAND Flash写入超标告警 的根本原因。
该问题虽为“轻微”级别,但长期存在将显著缩短NAND Flash寿命,可能导致BMC固件损坏或启动失败。
建议立即优化脚本策略,采用低频采样、内存缓存、异步写入、日志轮转等机制,从根本上缓解Flash写入压力。
最终目标:在满足监控需求的前提下,最小化对NAND Flash的写入负担。
用户通过脚本周期性轮询 sensor 和 fan 信息,执行命令如下:
ipmcget -t sensor -d list
ipmcget -d coolingdeviceinfo -v fan
并将结果记录日志或保存至CSV文件。
结果:
“The data written to the NAND flash in last 15 days exceeds 12G”
0x1A000043同时,系统日志中出现大量CLI超时信息,进一步加剧了NAND Flash写入压力。
logger.info() 写入日志
知识库依据:
- 实体
NAND Flash明确指出:“NAND Flash是服务器中的一种非易失性存储设备,其寿命受频繁写操作影响。”- 实体
"The Data Written to the NAND Flash in Last 15 Days Exceeds 12G"对应事件码0x1A000043,直接由NAND Flash写入量超标触发。- 文档搜索结果指出:“大量静态数据写入flash会影响性能和flash寿命。”
logger.info() 为同步写入,每次调用均直接写入文件系统。
知识库依据:
- 搜索结果【持久化机制常见问题】指出:“避免频繁结构性写入,批量插入应使用事务机制 db:tx(),否则可能导致实际flash写入量远大于数据量。”
- 类似场景中,300KB数据实际写入20MB Flash。
cli NOTICE: base.lua(467): processing_flow_1 foreach_1 timeout
知识库依据:
- 《openUBMC devmon特性设计说明书》提到:“磁盘I/O限制处理:需通过日志轮转、缓存、异步写入等方式减少磁盘访问。”
| 项目 | 内容 |
|---|---|
| 告警名称 | The data written to the NAND flash in last 15 days exceeds 12G |
| 事件码 | 0x1A000043 |
| 严重级别 | 轻微(Minor) |
| 检测主体 | BMC |
| 触发条件 | 15天内NAND Flash写入总量 > 12GB |
| 当前写入量 | 实测为 12.084GB(Total Data Written In 15 Days) |
| 记录文件 | nandflash_info.txt(由BMC生成) |
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1 | 编写Python脚本,每15秒轮询sensor与fan信息 | 成功获取数据 |
| 2 | 使用 logger.info() 输出日志并保存至CSV |
日志持续增长 |
| 3 | 脚本持续运行超过10天 | NAND Flash写入量累积接近阈值 |
| 4 | 约15天后 | BMC触发轻微告警 0x1A000043 |
示例:
time.sleep(300) # 替代 time.sleep(15)
示例:
buffer = [] if len(buffer) >= 10: # 每10次写入一次文件 save_to_csv_batch(buffer, "fan_collect.csv") buffer.clear()
concurrent-log-handler)或BMC内置异步I/O机制。
知识库支持:
- 《Metrics度量数据采集》提到支持 异步仪器(observable_counter)通过回调采集,避免频繁直接写入。
知识库支持:
- 《openUBMC devmon》建议:“日志轮转:自动轮转和压缩日志文件,防止磁盘空间耗尽。”
/tmp 或 tmpfs)。
知识库支持:
Get Sensor Event Status支持事件状态查询。ThresholdSensor_CPUTemp等传感器支持健康状态事件触发。
| 方法 | 说明 |
|---|---|
| 查看NAND写入统计 | 检查 nandflash_info.txt 文件,确认写入量趋势 |
| 监控BMC告警页面 | 登录BMC Web界面 → “维护诊断 → 当前告警” 查看是否仍有 0x1A000043 告警 |
| 使用iostat监控写入 | 执行 iostat -k -d 1 1 查看分区写入速率 |
| 日志写入量测试 | 修改脚本,对比优化前后日志文件大小与系统写入量差异 |
脚本高频轮询 + 同步日志写入 是导致 NAND Flash写入超标告警 的根本原因。
该问题虽为“轻微”级别,但长期存在将显著缩短NAND Flash寿命,可能导致BMC固件损坏或启动失败。
建议立即优化脚本策略,采用低频采样、内存缓存、异步写入、日志轮转等机制,从根本上缓解Flash写入压力。
最终目标:在满足监控需求的前提下,最小化对NAND Flash的写入负担。
查询下是否CPU占用率过高导致接口响应变慢
上面日志截长一点
看后面哪个接口超时了 都用了多久
这个就是日志刷太多了
超时的原因是什么呢?这个查询具测试说半分钟查一次,没有很频繁,超时应该不正常吧?
是的 正常不应该超时
所以说看一下后半截详细的日志
具体哪个接口 哪里超时了
主要就是fan和sensor超时了,因为脚本就在一直查这个,日志附上
app.log.txt (1.7 MB)
看起来就是单纯的遍历性能问题
麻烦确认一下
其实单个接口超时不超过100ms
但是也超过日志的阈值了
Nandflas 写入过多.z01.txt (8 MB)
Nandflas 写入过多.zip (3.4 MB)
现在论坛能上传后缀为zip的文件了,但是10mb的限制太小了,导致只能分卷压缩,把第一个文件的txt去掉,即可解压