由于放假,好久没登过服务器,今天登上服务器查看日志意外发现:/var/log/messages文件竟然被撑到20多个G!!!赶紧查看是什么情况,首先,20多个G的文件根本无法查看,因此,我想到了split拆分文件,然后再细化查看,命令如下:

split -b 1024m messages mesg_tmp

其中,split命令-b选项可以识别的单位为m、k,即将messages文件切割成每块1024m大小的文件,mesg_tmp为前缀名,系统会默认在其后面加上aa、ab、ac.......,此外,split的-l选项可以指定行数进行切割,这样更方便在日志中进行查找。具体的可以  split --help

打开文件之后,发现我之前的系统日志正常,只占了1500行左右,之后的20G基本都是以下消息:

Jan 31 04:53:10 !!liu!! kernel:
Jan 31 04:53:10 !!liu!! kernel: EDAC MC1: CE row 0, channel 0, label "CPU_SrcID#1_Channel#0_DIMM#0": 11 Unknown error(s): memory read on FATAL area OVERFLOW: cpu=8 Err=0001:0091 (ch=1), addr = 0x47b8c0740 => socket=1, Channel=0(mask=1), rank=0
Jan 31 04:53:10 !!liu!! kernel: sbridge: HANDLING MCE MEMORY ERROR
Jan 31 04:53:10 !!liu!! kernel: CPU 8: Machine Check Exception: 0 Bank 5: cc00034000010091
Jan 31 04:53:10 !!liu!! kernel: TSC 0 ADDR 28750fcc0 MISC 425e3e86 PROCESSOR 0:206d7 TIME 1454187190 SOCKET 1 APIC 20

上网百度了一下,发现很多这种问题,基本都是说服务器由于内存问题而崩溃,大概是内存硬件故障,可以更好主板内存条或者cpu,等等,还有说是MCE检测错误,建议我们安装Mcelog检测模块,以下是对MCE的官方说明:

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.

What causes MCE errors?

There most common reason for MCE events to occur are:

1.Memory errors or Error Correction Code (ECC) problems

2.Inadequate cooling / processor over-heating

3.System bus errors

4.Cache errors in the processor or hardware

由此可以推断确实应该是硬件方面的问题。不过,很多人对此现象的最终解决办法是忽略该信息,-_-! 好吧。

既然忽略该信息,那我们就保留我们之前的1500行日志记录,删除其余的吧,结果又遇到了问题:

echo "" > /var/log/messages

提示messages文件无法被修改,不允许的操作。后来想可能是rsyslogd的服务一直在运行,daemon导致其无法修改?然后我:

lsof messages

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 7403 root 4w REG 8,6 1299113404 2686 messages kill -9 7403
cat /dev/null > messages

仍然提示不允许的操作,什么鬼。。。。(lsof以后详细看)

再次百度,了解到这个messages文件可能被chattr保护了,我们lsattr一下,果然结果为-----a------,即设定了append属性,设定该参数后,只能向文件添加数据,而不能删除,多用于服务器日志文件安全。这个还真是看过,但是忘了。

结论:当我们以后发现用root都不能修改的文件时,大部分原因可能是该文件被chattr锁定了,通过chattr命令修改属性可以提高系统的安全性,但它不适合所有目录,例如,它不能保护/, /dev,  /tmp , /var目录,lsattr显示chattr设置的文件属性。

附一下chattr的参数说明: (来自:http://www.ha97.com/5172.html

+ :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。
A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果    filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
各参数选项中常用到的是a和i。a选项强制只可添加不可删除,多用于日志系统的安全设定。而i是更为严格的安全设定,只有superuser (root) 或具有CAP_LINUX_IMMUTABLE处理能力(标识)的进程能够施加该选项。

内存MCE错误导致暴力扩充messages日志 以及chattr记录的更多相关文章

  1. linux不同终端的操作是如何在messages日志中区分的

    今天在定位一个问题时,查看message日志,需要知道message日志中的记录分别是哪个Xterm终端操作的.比较了半天才发现原来日志中可以通过pts来进行区分.如下所示: --12T15:::|n ...

  2. dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露

    本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用 ...

  3. ORA-04031错误导致宕机案例分析

    今天遇到一起ORACLE数据库宕机案例,下面是对这起数据库宕机案例的原因进行分析.解读.分析过程中顺便记录一下这个案例的前因后果,攒点经验值,培养一下分析.解决问题的能力. 案例环境:   操作系统 ...

  4. 一次apk打开时报内存溢出错误,故写下内存溢出的各种原因和解决方法

    原转载:https://blog.csdn.net/cp_panda_5/article/details/79613870 正文内容: 对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么 ...

  5. java中三种常见内存溢出错误的处理方法

    更多 10   相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的 ...

  6. java中三种常见内存溢出错误的处理方法(good)

    相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决j ...

  7. 给虚拟机添加新硬盘并分区,fdisk查看分区,分区,重新读取分区表信息partprobe,格式化,挂载,查看分区挂载信息,自动挂载文件/etc/fstab,/etc/fstab文件错误导致重启崩溃后的修复

    1.虚拟机关机断电 2.添加硬盘 2.开机 3.fdisk -l查看刚才新添加的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 2147483 ...

  8. 《深入理解Java虚拟机》(六)堆内存使用分析,垃圾收集器 GC 日志解读

    堆内存使用分析,GC 日志解读 重要的东东 在Java中,对象实例都是在堆上创建.一些类信息,常量,静态变量等存储在方法区.堆和方法区都是线程共享的. GC机制是由JVM提供,用来清理需要清除的对象, ...

  9. linux异常处理:selinux配置错误导致无法重启

    点击返回自学Linux集锦 linux异常处理:selinux配置错误导致无法重启 一次linux无法重启异常记录: 当时第一反应就是梳理最近的配置变更,特别是能预知相关的就是selinux配置变更. ...

随机推荐

  1. CRB and Candies LCM 性质

    题目 CRB and Candies 题意 \[ \text{给定正整数N,求} LCM \lbrace C \left(N , 0 \right),C\left(N , 1 \right),..., ...

  2. ActiveMQ 权限(二)

    在 ActiveMQ 权限(一) 配置了对消息队列的权限,以下设置完成消息的权限,比如只接受某ip的消息. 两步完成, 第一步:继承接口org.apache.activemq.security.Mes ...

  3. Java NIO.2 使用Files类遍历文件夹

    在以前的Java版本中,如果要遍历某个文件夹下所有的子文件.子文件夹,需要我们自己写递归,很麻烦. 在Java7以后,我们可以NIO.2中的Files工具类来遍历某个文件夹(会自动递归). 大致用法: ...

  4. rapidxml读取包含中文路径的xml解析错误的解决方法

    from http://blog.csdn.net/qinwei4072880/article/details/38865179 1.rapidxml不支持中文路径. 2.rapidxml不支持Uni ...

  5. 如何让自己的程序支持iPhone5–RetinaImages

    我们知道如果想让程序的启动图像能够适应iPhone5(640X1136),那么我们需要把启动的图像命名以“-568h@2x”结尾的图片,那 么是不是程序中用到的所有图片都可以用这样的方式来命名,以适合 ...

  6. Java的日志模块

    目前主流的是是logback和log4j2,它们底层实现用的都是slf4j,通过slf4j-api调用 使用指定类初始化日志对象,在日志输出的时候,可以打印出日志信息所在类如:Logger logge ...

  7. 压缩软件Snappy的安装

    1.下载源码,通过编译源码安装  tar -zxvf  /home/zfll/soft/snappy-1.1.2.tar.gz cd snappy-1.1.2 ./configure make sud ...

  8. centos DHCP

    yum install dhcp cat /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example > /etc/dhcp/dhcpd.conf vim /etc ...

  9. vue2 axios 接口函数封装

    封装 axios 工具,编辑 src/api/index.js 文件 首先,我们要使用 axios 工具,就必须先安装 axios 工具.执行下面的命令进行安装 npm install axios - ...

  10. maximal-rectangle——找出最大矩形的面积

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...