MCE(Machine Check Exception)是由CPU侦测出来的错误,它错误包含两种主要类型:notice(提示)/warning(警告),和fatal exception(致命性的错误)。Warning(警告)将会在你的系统log下输出一条类似于"Machine Check Event logged"的信息,我们可以通过一些linux的应用程序对这部分log进行详细的信息查看;而fatal MCE(致命的错误)会导致机器停止响应,MCE的详细信息也将会输出到系统的console中。
什么会导致MCE错误出现?
常见原因有以下几种:
1. 内存错误或ECC问题
2. 冷却不足、CPU过热
3. 系统总线错误
4. 缓存处理器或硬件错误
如何找出MCE错误对应的含义?
Linux系统下,如果在Console或者系统log中看到MCE的错误,可以运行mcelog命令从系统内核中读取详细的信息。需要注意的是,一旦运行了mcelog,我们将无法再通过这条命令去查询已经出现的错误,所以最好运行mcelog的时候讲文本输出到文件中以做进一步的分析,参考命令如下:
root @ localhost:/ root> / usr / sbin / mcelog> mcelog.ou
有些系统会定期执行这个操作,并将文件输出到/var/log/mcelog中,因此,如果系统log中发现了MCE信息,但是使用mcelog查询不到任何数据时,可以试着查看/var/log/mcelog文件。
致命的MCE错误导致机器停止响应后我们需要怎么办?
致命的MCE错误通常都是由硬件错误所引起的,我们通过重启设备重新进入系统后,首先需要查看系统log,一个典型的MCE相关的错误log如下:
CPU 1: Machine Check Exception: 4 Bank 4: f600200137080813
TSC b0ce27165dd3 ADDR 180ee1b40
这时我们可以通过mcelog去将这条error log的详细信息dump出来,命令如下:
root@localhost:/root> /usr/sbin/mcelog --ascii < myerror
得到的详细错误信息如下:
HARDWARE ERROR. This is *NOT* a software problem!
Please contact your hardware vendor
CPU 1 4 northbridge TSC b0ce27165dd3
Northbridge Chipkill ECC error
Chipkill ECC syndrome = 3700
bit32 = err cpu0
bit45 = uncorrected ecc error
bit57 = processor context corrupt
bit61 = error uncorrected
bit62 = error overflow (multiple errors)
bus error 'local node origin, request didn't time out
generic read mem transaction
memory access, level generic'
STATUS f600200137080813 MCGSTATUS 4
这表示发生了Uncorrected ECC error,意味着其中一根内存模块出现了问题。
Reference:
1. Machine-check exception, https://en.wikipedia.org/wiki/Machine-check_exception
2. What are Machine Check Exceptions (or MCE)?
http://www.advancedclustering.com/act_kb/what-are-machine-check-exceptions-or-mce/