Skip to content

Latest commit

 

History

History
100 lines (69 loc) · 4.57 KB

acpi_error_and_node_exporter.md

File metadata and controls

100 lines (69 loc) · 4.57 KB

服务器异常重启,发现系统日志

Jul  5 08:37:53 server.example kernel: ACPI Error: SMBus/IPMI/GenericSerialBus write requires Buffer of length 66, found length 32 (20130517/exfield-299)
Jul  5 08:37:53 server.example kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMM] (Node ffff880fe8cf2118), AE_AML_BUFFER_LIMIT (20130517/psparse-536)
Jul  5 08:37:53 server.example kernel: ACPI Exception: AE_AML_BUFFER_LIMIT, Evaluating _PMM (20130517/power_meter-339)

上述日志是有关ACPI电源管理的报错,搜索了一下,原因是HP的硬件/firmware的bug,可以参考 Kernel ACPI Error SMBus/IPMI/GenericSerialBus:

lm-sensors 从电源检测感应器(power meter sensor)读取数值,HP会会忽略这个方法的参数,这就导致了上述错误。这个错误消息实际上就是BIOS和内核之间的诊断出现了ACPI buffer大小相关的问题,涉及到电源监控。由于这个问题是BIOS的bug,通常需要从硬件厂商这里获得firmware更新来解决。不过,如果无法更新firmware,则可以关闭 acpi_power_meter 内核模块来简单解决。

注意:通常情况下,操作系统安装了 lm-sensors 工具包才会出现上述报错日志。不过,如果你安装了prometheus的node_exporter用来输出主机的metrics,则系统日志会不断滚动上述报错 - 原因和解决方法请参考 node_exporter creating ACPI Error with Kernel error log #903 ,下文我将介绍解决方法。

可以查看 power1_avreage 文件:

find /sys/devices/LNXSYSTM\:00/ |grep ACPI000D

可以看到该文件位于 /sys/devices/LNXSYSTM:00/device:00/ACPI000D:00/ 目录下,你可以尝试读取该文件:

cat /sys/devices/LNXSYSTM:00/device:00/ACPI000D:00/power1_average

此时返回的值可能是 0 ,同时日志文件出现上述报错。

  • 安装sensors工具:
yum install lm_sensors

然后检查感应器:

sensors

输出可以看到如下

...
power_meter-acpi-0
Adapter: ACPI interface
power1:        0.00 W  (interval = 300.00 s)
...

可以看到这个电源感应器是 power_meter-acpi-0 ,然后我们在配置文件 /etc/sensors3.conf 添加

chip "power_meter-acpi-0"
        ignore power1

此时再次使用 sensors 命令检查,可以看到输出有所不同,已经关闭了 power1 :

power_meter-acpi-0
Adapter: ACPI interface

prometheus node_exporter

我遇到的案例是 HP ProLiant DL360p Gen8 服务器上安装了 Prometheus node_exporter 之后,系统日志不断滚动出现ACPI错误

Jul  5 16:22:43 server.example kernel: ACPI Error: SMBus/IPMI/GenericSerialBus write requires Buffer of length 66, found length 32 (20130517/exfield-299)
Jul  5 16:22:43 server.example kernel: ACPI Error: Method parse/execution failed [\_SB_.PMI0._PMM] (Node ffff880fe8cf2118), AE_AML_BUFFER_LIMIT (20130517/psparse-536)
Jul  5 16:22:43 server.example kernel: ACPI Exception: AE_AML_BUFFER_LIMIT, Evaluating _PMM (20130517/power_meter-339)

虽然这个错误是无害的,可以完全忽略,但是对于强迫症SA来说,这个滚动报错实在太多,浪费了系统资源。

解决方法参考 Frequent ACPI errors starting with SMBus or IPMI write requires Buffer of length 42. ,如果不能更新服务器BIOS firmware,就通过关闭内核 acpi_power_meter 模块绕过这个问题。操作命令可以参考 node_exporter creating ACPI Error with Kernel error log #903

  • 对于RHEL6执行以下命令
modprobe -r power_meter
echo "blacklist power_meter" >>/etc/modprobe.d/hwmon.conf
  • 对于RHEL7执行以下命令
modprobe -r acpi_power_meter
echo "blacklist acpi_power_meter" >>/etc/modprobe.d/hwmon.conf 

Prometheus Node exporter是使用Go语言编写的metric采集插件,通过Unix内核输出硬件和OS metrics。

参考