理解linux服务器mcelog如何工作

mcelog是Linux系统中用于检测和记录硬件错误,尤其是内存和CPU错误的工具。在el6和el7系统中,mcelog通过不同的方式运行,如cron任务或守护进程。在el7上,mcelog通过mcelog.service服务管理,日志默认只记录在/var/log/messages,除非在启动命令中添加--logfile参数。mce-inject和mce-test工具可用于模拟硬件错误以验证mcelog的正确性。通过解析mcelog输出,可了解系统硬件异常情况,帮助诊断和预防潜在问题。
摘要由CSDN通过智能技术生成

What are Machine Check Exceptions (or MCE)?

A machine check exception is an error dedected by your system's processor. There are 2 major types of MCE errors, a notice or warning error, and a fatal execption. The warning will be logged by a "Machine Check Event logged" notice in your system logs, and can be later viewed via some Linux utilities. A fatal MCE will cause the machine to stop responding and the details of the MCE will be printed out to the system's console.

本文重点,主要看案例2,带你很好的理解mcelog如何工作的?

  • mcelog的干什么的?
    • mcelog 是 x86 的 Linux 系统上用来 检查硬件错误,特别是内存和CPU错误的工具.
  • mcelog怎么运行的?这三种方式有什么优点?缺点?
    • 有三种运行的方式,cron,daemon,trigger
    • cron是最low的方式,会丢失,trigger是比较高级的方式,触发的。一般我们在el6.el7上都是用daemon的方式
  • 线上情况:el6,el7上怎么运行的?
    • el6上默认应该是使用cron,每小时运行一次,也可以使用daemon守护进程的方式(需要手动执行mcelog --daemon),默认日志打到/var/log/mcelog,和/var/log/message.
    • el7上默认使用mcelog.service启动的,相当于daemon守护进程的方式,但是,默认日志只打到和/var/log/message,然而默认/var/log/mcelog文件不存在,这个需要在启动命令种加上--logfile=/var/log/mcelog才可以。
  • 如何模拟硬件错误验证mcelog是否运行正常?
    • 有一个工具叫:mceinject ,mcetest,参见下文的案例2

mcelog简介

可纠正和不可纠正的硬件错误统称为机器检查异常 (MCE)。CPU 自身能够纠正错误,并通知底层操作系统与 CPU 或缓存有关的问题。CPU 本身还能从某些错误中恢复。Oracle Linux 可将 mcelog 用作机器检查的日志子系统。首先,必须使用以下命令在服务器上安装软件包。

yum install mcelog.x86_64
service mcelogd start
chkconfig mcelogd on

or
mcelog --daemon

or
systemctl restart mcelog.service

mcelog 是 x86 的 Linux 系统上用来 检查硬件错误,特别是内存和CPU错误的工具.

mcelog 软件包有工作方式,有使用cron的,也有使用守护进程的,,这个取决于你的操作系统版本。

/etc/cron.hourly/mcelog.cron 中的 cron 作业每小时检查 MCE 并将其保存到 /var/log/mcelog 中。由后台程序控制 mcelog 的方法更好一些,因为这样可以更快速地检测到硬件错误并立即记录下来,而不必等待 cron 作业运行。使用 mcelog 能检测到总线错误、内存错误和 CPU 缓存错误之类的错误,如果即将发生硬件故障,可以提前通知。

mcelog 能捕获两类错误:已纠正的 和未纠正的。已纠正的错误是由 CPU 处理的事件,可用来识别可能预测更大问题的趋势。

未纠正的错误是关键异常,如果 CPU 无法恢复,往往会导致系统上的内核错误。这会导致应用程序重置和中断。对于未纠正的错误,mcelog 捕获错误的能力取决于错误导致热重启还是硬重启。如果是热重启,信息会被 mcelog 捕获,恢复后可看到。硬重启会导致数据丢失,而且 mcelog 可能捕获不到该事件。

如下示例显示的 mcelog 错误消息显示了 CPU 1 上一个已纠正的错误:

Hardware event. This is not a software error.
MCE 0
CPU 1 BANK 2
ADDR 1234
TIME 1364535025 Fri Mar 29 01:30:25 2013 MCG status:
MCi status:
Corrected error
Error enabled
MCi_ADDR register valid
MCA: No Error
STATUS 9400000000000000 MCGSTATUS 0
MCGCAP c07 APICID 1 SOCKETID 0
CPUID Vendor Intel Family 6 Model 58

为了进行测试和故障排除,可以使用 mce-test 包生成假的硬件 MCE 事件并执行系统测试。

mce-test 软件包含丰富的默认测试,能模拟真实硬件故障,甚至会导致内核错误。需要执行几个配置步骤才能对系统进行此类测试。

首先,需要安装几个支持软件包才能在测试系统上配置 mce-test。使用以下命令:

yum install gcc.x86_64 gcc-c++.x86_64 flex.x86_64 dialog.x86_64 ras-utils.x86_64 git.x86_64

mcelog相关

mcelog的启动方式

  1. cron,最老的方式,有确定,定时任务,会丢失一些
  2. daemon,el7上用这种
  3. trigger,高级一点的方式,触发的时候,看man mcelog

mcelog相关文件

/dev/mcelog 设备文件

/var/log/mcelog messages日志文件

/etc/mcelog/mcelog.conf配置文件

/var/run/mcelog.pid

默认故障日志只记录在/var/log/mcelog,并不记录到系统日志中。
如果需要在系统日志中也体现,需修改/etc/mcelog/mcelog.conf文件,将前面#去掉,并保存。

# log output options
# Log decoded machine checks in syslog (default stdout or syslog for daemon)
#syslog = yes
# Log decoded machine checks in syslog with error level
#syslog-error = yes
# Never log anything to syslog
#no-syslog = yes
# Append log output to logfile instead of stdout. Only when no syslog logging is active
#logfile = filename

el6的mcelog

el6运行mcelog的方式

在el6上mcelog使用cron来运行,安装mcelog会自动产生如下文件:

/etc/cron.hourly/mcelog.cron

默认配置 /etc/cron.hourly/mcelog.cron 每小时执行一次。
这个定时脚本是软件包 mcelog安装的,这个工具mcelog目前仍在持续开发维护,可以从内核工具 或GitHub andikleen/mcelog 获得。

#ps aux | grep mcelog
root       4177  0.0  0.0   6756   616 ?        Ss   Aug18   0:00 /usr/sbin/mcelog --daemon

el6手动运行mcelog的方式

# mcelog --daemon

el6上查看mcelog日志

#tail /var/log/mcelog

什么也没有说明,正常。

查看mcelog守护进程是否检测到错误信息

# mcelog --client

没有输出,表示正常。

解析系统异常时的mcelog输出:

# mcelog --ascii < file
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值