mcelog系统硬件诊断日志搜集工具
Last updated
Was this helpful?
Last updated
Was this helpful?
mcelog
在维护Linux服务器时,有时候你会看到系统cron定时执行了一个名为mcelog
的程序。
默认配置 /etc/cron.hourly/mcelog.cron
每小时执行一次。
这个定时脚本是软件包 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
/etc/mcelog/mcelog.conf
是mcelog
配置文件
mcelog
在RHEL 7.x平台,已经舍弃了使用cron方式运行mcelog
程序的方法,而改为系统启动时运行mcelog.service
服务进程。使用ps
命令可以检查到系统运行了如下mcelog
服务
通常检查系统硬件故障,可以直接使用mcelog
客户端
例如下面案例输出显示系统内存故障
only decoding architectural errors
错误提示使用比较新型的处理器的环境,执行mcelog
可能会有如下报错
上述硬件平台使用
上述报错only decoding architectural errors
表明mcelog不知道你的CPU,不能够解码该型号的特定错误,但是mcelog仍然能够将错误记录成raw(hex)格式。重要的错误通常是结构相关的,但是有些时候新的结构相关错误加入后,可能就不能看到它被解码。
可以尝试升级到最新的mcelog
版本,通常可以支持新的硬件架构。
参考