mcelog系统硬件诊断日志搜集工具
发现mcelog
mcelog
在维护Linux服务器时,有时候你会看到系统cron定时执行了一个名为mcelog
的程序。
默认配置 /etc/cron.hourly/mcelog.cron
每小时执行一次。
这个定时脚本是软件包 mcelog
安装的,这个工具mcelog目前仍在持续开发维护,可以从内核工具 或GitHub andikleen/mcelog 获得。
mcelog
简介
mcelog
简介mcelog
记录了在现代x86 Linxu系统上的硬件的主机检查
(主要是内存,IO和CPU的硬件错误)日志。当硬件报告了主机自检错误,内核会立即执行操作(例如杀死进程等)然后mcelog就会解码这些错误并且进行一些高级的错误响应,例如屏蔽故障的内存、CPU,或者触发事件。另外,mcelog也能够通过记录日志来处理修正后的错误。
mcelog主要用来处理主机自检和温控事件(温控事件由CPU监测并报告错误)。
32位x86 Linux内核(从2.6.30开始)和64位 Linux内核(2.6内核系统的早期开始)都需要mcelog来记录主机检查和运行在所有需要错误处理的Linux主机上。
mcelog服务记录内存和各种途径搜集的其它错误。mcelog --client
命令可以用来查询一个运行的mcelog
服务。这个服务也可以在可配置的阀值到达时触发一些动作。这对于一些自动化预测故障分析算法:包括坏页下线和自动化的缓存错误处理。用户也可以配置自己定义的动作。
所有的错误都被记录到/var/log/mcelog
或syslog
或journal
中。
这里
主机检查
是指通过硬件自己检查出来的硬件故障并通过软件报告出来。
对于内存错误,mclog支持x86系统的集成的内存控制器;也支持所有现代的x86系统的cpu错误。
传统上mcelog
是通过cron
定时任务运行,但是这种方式现在已经不再适用。现在运行mcelog
的方法是在启动操作系统时作为daemon运行。另外,mcelog
也用于在命令行解码故障主机检查,不过,通常并不需要,因为现在内核可以在重启后自动完成日志记录。
当mcelog
运行在daemon模式,它就可以持续在后台监视和等待错误发生,这是最快发现故障也是功能最全的运行方式。建议使用daemon模式运行mcelog
,因为一些新功能(如内存页错误的预测故障分析)需要持续运行在daemon模式。
触发器(trigger
)是内核在一个错误发生时运行mcelog
的一种新的方式。这个配置是通过 echo /usr/sbin/mcelog > /sys/devices/system/machinecheck/machinecheck0/trigger
来配置的。
默认没有配置
/sys/devices/system/machinecheck/machinecheck0/trigger
,这时这个内容是空的。当将/usr/sbin/mcelog
添加到这个proc文件中,就会在内核错误发生时触发运行/usr/sbin/mcelog
来处理解码错误日志,方便排查故障。内核编译配置
CONFIG_XEN_MCE_LOG
允许内核从Xen平台获取MCE错误并转换成Linux mcelog格式用于mcelog工具。
mcelog
操作需要/dev/mcelog
设备,这个设备通常自动由udev
创建,也可以通过手工命令创建mknod /dev/mcelog c 10 227
。设备创建后剋通过ls -lh /dev/mcelog
检查:
安全
mcelog
需要使用root
身份运行,因为它需要出发动作,如page-offlining
,这要求CAP_SYS_ADMIN
。并且它需要打开设备/dev/mcelog
和一个用于支持客户端的unix socket。
当mcelog
运行在daemon模式,它会监听在一个unix socket上并处理mcelog --client
的请求。默认会检查请求的uid/gid
并且默认是0/0
,可配置。客户端处理和相应是由daemon的完整的特权处理的。
mcelog.conf
mcelog.conf
/etc/mcelog/mcelog.conf
是mcelog
配置文件
CentOS 7上的mcelog
mcelog
在RHEL 7.x平台,已经舍弃了使用cron方式运行mcelog
程序的方法,而改为系统启动时运行mcelog.service
服务进程。使用ps
命令可以检查到系统运行了如下mcelog
服务
案例
通常检查系统硬件故障,可以直接使用mcelog
客户端
例如下面案例输出显示系统内存故障
only decoding architectural errors
错误提示
only decoding architectural errors
错误提示使用比较新型的处理器的环境,执行mcelog
可能会有如下报错
上述硬件平台使用
上述报错only decoding architectural errors
表明mcelog不知道你的CPU,不能够解码该型号的特定错误,但是mcelog仍然能够将错误记录成raw(hex)格式。重要的错误通常是结构相关的,但是有些时候新的结构相关错误加入后,可能就不能看到它被解码。
可以尝试升级到最新的mcelog
版本,通常可以支持新的硬件架构。
参考 I get a "only decoding architectural errors" message. Does mcelog log all errors?
参考
Last updated