zoukankan      html  css  js  c++  java
  • 记录一次Centos7宕机事件

    事件背景

    2020年9月25日18点18分,收到告警,大数据02节点宕机,发现此问题出现过3次,分别在生成大数据服务器的2个节点上发生。这次决心要查处问题。

    服务是CDH节点,就是大数据那一套东西。

    系统版本:CentOS Linux release 7.3.1611

    内核版本:3.10.0-514.el7.x86_64

    服务器厂商:Dell R730

    故障分析

     服务器宕机主要有3条分析思路。

    • 是否内存或者CPU爆满,导致服务器OOM,导致服务器重启
    • 是否硬件导致重启
    • 是否触发系统BUG

    本着这3条思路,我们接下来分头排查。

    • 观察系统日志(/var/log/messages、/var/log/dmesg)
    • 登录管理卡地址,查看是否有硬件告警,并收集硬件信息,报告厂商协助排查
    • 检查是否是系统内核bug导致,所以得看kdump在系统崩溃保留的信息

    分析过程:

    1、登录服务器查看系统日志

     上图是日志估值发生时候的日志,我们可以看出,这里只是故障发生后的服务器启动日志,故障发生时并没留下什么蛛丝马迹。所以这里并没有可用的信息,可以忽略。

    2、硬件检测

      DELL厂商回复,硬件一切正常,没有故障

    3、我们分析一下系统崩溃时候kdump给我们留下来的信息。

    什么是kdump

    kdump 可以说是服务器的黑匣子,是一种的基于 kexec 的内核崩溃转储机制。系统一但崩溃,内核无法正常记录信息了,这时kdump将转入带第二个捕获内核,将第二个内核加载的内存中,对第一个内核的信息进行捕获。由于 kdump 利用 kexec 启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。kexec是一个快速启动机制,可以通过已经运行的内核,启动另外一个内核并且不需要经过bios。

    安装启动kdump,我们这里是默认启动的

     安装crash命令和kdump相关工具,分析数据

    yum install crash -y 

    下载

    wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm
    wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-3.10.0-514.el7.x86_64.rpm

    安装

    rpm -ivh  kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm kernel-debuginfo-3.10.0-514.el7.x86_64.rpm

    crash解析奔溃日志

    在发生故障的时候会在/var/crash/生产一个主机+故障时间目录,并产生两个文件vmcore  vmcore-dmesg.txt

    vmcore-dmesg.txt 记录的是粗略的信息。主要能分析出两个问题:

    错误类型:

    例如:

    divide error、BUG之类的关键词

    错误地点:

    RIP为造成内核崩溃的指令,Call Trace为函数调用栈,通过RIP和Call Trace可以确定函数的调用路径,以及在哪个函数中的哪条指令引发了错误。

    例如本次错误是RIP: 0010:[<ffffffffa03742fb>]  [<ffffffffa03742fb>] xfs_vm_writepage+0x58b/0x5d0 [xfs]

    <ffffffffa03742fb>  <ffffffffa03742fb> 是指内存地址

    xfs_vm_writepage 是错误函数

    Call Trace为函数的调用栈,是从下往上看的。可以用来分析函数的调用关系。

    本次故障是通过vmcore-dmesg.txt文件观察到的,错误信息如下:

     我们还可以使用vmcore解析出详细日志,并进入当时的内核,查看一些当时的情况,具体可以查看此链接https://www.bladewan.com/2017/09/21/kdump/

    这时候我们找到的问题,接下来是解决或者是怎么防止故障了,我们谷歌搜索一下kernel BUG at fs/xfs/xfs_aops.c:1062!,可以看到红帽的官方文章https://access.redhat.com/solutions/2779111。或者https://blog.51cto.com/jiaxiaolei/2140212

    通过文章我们可以得知是内核BUG,起因是JAVA的JVM的“hsperf”内存映射可写“hsperfdata”文件

    解决办法:

    升级内核3.10.0-693以上。但有的环境升级内核不方便,同时应用是java应用,可以使用临时方法jvm 中关闭hsperf的特性。

    参考链接:

    https://blog.51cto.com/jiaxiaolei/2140212

    https://www.bladewan.com/2017/09/21/kdump/

  • 相关阅读:
    面试题19:包含min函数的栈
    编程之美 计算字符串的相似度
    android 数据持久化——I/O操作
    SSD磁盘,CPU居高不下,高并发的情况下,是不是mysql解析器耗费的cpu资源高?
    Eclipse、MyEclipse优化,提高运行速度
    Sonar入门学习
    Oracle 生成指定范围内随机日期
    ios中的GCD
    如何使用Win8系统自带杀毒软件
    安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  • 原文地址:https://www.cnblogs.com/xzkzzz/p/13740726.html
Copyright © 2011-2022 走看看