百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

虚拟机panic问题排查(虚拟机故障排故思路)

nanshan 2024-10-10 07:23 50 浏览 0 评论

问题分析

一台aws云主机先后crash了几次,查看系统dmes日志,排查crash原因

[789106.990754] Uhhuh. NMI received for unknown reason 21 on CPU 6.
[789106.990754] Do you have a strange power saving mode enabled?
[789106.990755] Kernel panic - not syncing: NMI: Not continuing
[789106.990755] CPU: 6 PID: 2644936 Comm: server Not tainted 4.14.81.bm.21-amd64 #1
[789106.990755] Hardware name: Amazon EC2 m5a.2xlarge/, BIOS 1.0 10/16/2017
[789106.990756] Call Trace:
[789106.990756]  dump_stack+0x5c/0x85
[789106.990756]  panic+0xe4/0x232
[789106.990756]  ? printk+0x52/0x6e
[789106.990757]  nmi_panic+0x35/0x40
[789106.990757]  unknown_nmi_error+0x6f/0x80
[789106.990757]  do_nmi+0xe5/0x130
[789106.990757]  nmi+0x83/0xcc

结合内核源码查看发生的panic的地方:

源码地址: https://elixir.bootlin.com/linux/v4.7/source/arch/x86/kernel/nmi.c#L75
unknown_nmi_error(unsigned char reason, struct pt_regs *regs)
{
        int handled;

        /*
         * Use 'false' as back-to-back NMIs are dealt with one level up.
         * Of course this makes having multiple 'unknown' handlers useless
         * as only the first one is ever run (unless it can actually determine
         * if it caused the NMI)
         */
        handled = nmi_handle(NMI_UNKNOWN, regs);
        if (handled) {
                __this_cpu_add(nmi_stats.unknown, handled);
                return;
        }

        __this_cpu_add(nmi_stats.unknown, 1);

        pr_emerg("Uhhuh. NMI received for unknown reason %02x on CPU %d.\n",
                 reason, smp_processor_id());

        pr_emerg("Do you have a strange power saving mode enabled?\n");
        if (unknown_nmi_panic || panic_on_unrecovered_nmi)
                nmi_panic(regs, "NMI: Not continuing");

        pr_emerg("Dazed and confused, but trying to continue\n");
}

从源码可以看到直接原因是nmi不可中断导致系统crash

那到底是什么原因导致nmi呢? 谷歌了一圈,众说纷纭,有说软件bug的,有说硬件bug的。

可能原因1: 软件bug

查找在crash的时间点左右的atop系统快照

atop -y -r  atop_20210225_until10:27:29


能定位到该pid为业务进程game的子进程。有可能是该子进程异常导致了系统panic(只是怀疑)

不过我觉得用户空间的操作不太可能引起系统crash

可能原因2: 硬件问题

case1,主板电源的机器:https://community.amd.com/t5/server-gurus-discussions/solved-uhhuh-nmi-received-for-unknown-reason/td-p/74321

After some googleing, it looks like it might be a RAM problem.
As it is a production server with FC2 (cannot run OMSA except
with OMSA Knoppix), I'd appreciate some hints on what to look at.

case2: redhat官方的描述

当中断被禁用或指示CPU忽略该中断时,该中断被称为屏蔽。阿非屏蔽中断(NMI)不能被忽略,并且通常只用于关键硬件错误。

综合,以上原因,分别从不同方向去排查。

  1. 统计挂掉的机器的ip,看硬件分布,看出问题的机器是否都在同一台母机,可能是单个母机环境问题导致的panic,结论是虚拟机都非亲和性的分布在不同的物理机上,可以排除是问题的虚拟机在某个母机上的问题;
  2. 分析kdump文件(前提是机器开启了kdump):crash /usr/lib/debug/boot/vmlinux-4.14.81.bm.21-amd64 dump.202102251020,不同机器,命令情况不一样
OAD AVERAGE: 0.74, 0.77, 0.71
       TASKS: 766
    NODENAME: xxxx
     RELEASE: 4.14.81.bm.21-amd64
     VERSION: #1 SMP Debian 4.14.81.bm.21 Wed Apr 29 07:43:38 UTC 2020
     MACHINE: x86_64  (2199 Mhz)
      MEMORY: 31.4 GB
       PANIC: "Kernel panic - not syncing: NMI: Not continuing"
         PID: 2644936
     COMMAND: "server"
        TASK: ffff9a3fd280d000  [THREAD_INFO: ffff9a3fd280d000]
         CPU: 6
       STATE: TASK_RUNNING (PANIC)

crash> bt
PID: 2644936  TASK: ffff9a3fd280d000  CPU: 6   COMMAND: "server"
 #0 [ffffa6ee8de47d70] machine_kexec at ffffffff9905749b
 #1 [ffffa6ee8de47dc8] __crash_kexec at ffffffff99110d31
 #2 [ffffa6ee8de47e88] panic at ffffffff9907cbb2
 #3 [ffffa6ee8de47f10] nmi_panic at ffffffff9907c795
 #4 [ffffa6ee8de47f18] unknown_nmi_error at ffffffff990280df
 #5 [ffffa6ee8de47f30] do_nmi at ffffffff99028365
 #6 [ffffa6ee8de47f50] nmi at ffffffff998018e3
    RIP: 000000000040e35a  RSP: 000000c0bf98d500  RFLAGS: 00000293
    RAX: 000000000000004b  RBX: 000000000000009b  RCX: 000000c098114760
    RDX: 0000000000000000  RSI: 00000000017602e0  RDI: 00000000000000d0
    RBP: 000000c0bf98d530   R8: 0000000000000000   R9: 000000c057332b08
    R10: 0000000000000000  R11: ffffffffffffffff  R12: 0000000000000000
    R13: 0000000000000080  R14: 0000000000000149  R15: ffffffffffffffff
    ORIG_RAX: ffffffffffffffff  CS: 0033  SS: 002b
crash> quit

能得出基本结论: aws的机器给虚拟机发了nmi中断,大概率是硬件问题

只能提交dmesg日志给aws的硬件工程师排查。

如何规避?

临时设置内核参数,关闭nmi panic

cat /etc/sysctl.conf
kernel.unknown_nmi_panic=0
kernel.panic_on_unrecovered_nmi = 0

sysctl -p 生效

分析工具

  1. dmeg日志
  2. Kdump
  3. Atop工具
  4. crash命令

相关推荐

实战派 | Java项目中玩转Redis6.0客户端缓存

铺垫首先介绍一下今天要使用到的工具Lettuce,它是一个可伸缩线程安全的redis客户端。多个线程可以共享同一个RedisConnection,利用nio框架Netty来高效地管理多个连接。放眼望向...

轻松掌握redis缓存穿透、击穿、雪崩问题解决方案(20230529版)

1、缓存穿透所谓缓存穿透就是非法传输了一个在数据库中不存在的条件,导致查询redis和数据库中都没有,并且有大量的请求进来,就会导致对数据库产生压力,解决这一问题的方法如下:1、使用空缓存解决对查询到...

Redis与本地缓存联手:多级缓存架构的奥秘

多级缓存(如Redis+本地缓存)是一种在系统架构中广泛应用的提高系统性能和响应速度的技术手段,它综合利用了不同类型缓存的优势,以下为你详细介绍:基本概念本地缓存:指的是在应用程序所在的服务器内...

腾讯云国际站:腾讯云服务器如何配置Redis缓存?

本文由【云老大】TG@yunlaoda360撰写一、安装Redis使用包管理器安装(推荐)在CentOS系统中,可以通过yum包管理器安装Redis:sudoyumupdate-...

Spring Boot3 整合 Redis 实现数据缓存,你做对了吗?

你是否在开发互联网大厂后端项目时,遇到过系统响应速度慢的问题?当高并发请求涌入,数据库压力剧增,响应时间拉长,用户体验直线下降。相信不少后端开发同行都被这个问题困扰过。其实,通过在SpringBo...

【Redis】Redis应用问题-缓存穿透缓存击穿、缓存雪崩及解决方案

在我们使用redis时,也会存在一些问题,导致请求直接打到数据库上,导致数据库挂掉。下面我们来说说这些问题及解决方案。1、缓存穿透1.1场景一个请求进来后,先去redis进行查找,redis存在,则...

Spring boot 整合Redis缓存你了解多少

在前一篇里面讲到了Redis缓存击穿、缓存穿透、缓存雪崩这三者区别,接下来我们讲解Springboot整合Redis中的一些知识点:之前遇到过,有的了四五年,甚至更长时间的后端Java开发,并且...

揭秘!Redis 缓存与数据库一致性问题的终极解决方案

在现代软件开发中,Redis作为一款高性能的缓存数据库,被广泛应用于提升系统的响应速度和吞吐量。然而,缓存与数据库之间的数据一致性问题,一直是开发者们面临的一大挑战。本文将深入探讨Redis缓存...

高并发下Spring Cache缓存穿透?我用Caffeine+Redis破局

一、什么是缓存穿透?缓存穿透是指查询一个根本不存在的数据,导致请求直接穿透缓存层到达数据库,可能压垮数据库的现象。在高并发场景下,这尤其危险。典型场景:恶意攻击:故意查询不存在的ID(如负数或超大数值...

Redis缓存三剑客:穿透、雪崩、击穿—手把手教你解决

缓存穿透菜小弟:我先问问什么是缓存穿透?我听说是缓存查不到,直接去查数据库了。表哥:没错。缓存穿透是指查询一个缓存中不存在且数据库中也不存在的数据,导致每次请求都直接访问数据库的行为。这种行为会让缓存...

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

Redis客户端缓存的几种实现方式

前言:Redis作为当今最流行的内存数据库和缓存系统,被广泛应用于各类应用场景。然而,即使Redis本身性能卓越,在高并发场景下,应用于Redis服务器之间的网络通信仍可能成为性能瓶颈。所以客户端缓存...

Nginx合集-常用功能指导

1)启动、重启以及停止nginx进入sbin目录之后,输入以下命令#启动nginx./nginx#指定配置文件启动nginx./nginx-c/usr/local/nginx/conf/n...

腾讯云国际站:腾讯云怎么提升服务器速度?

本文由【云老大】TG@yunlaoda360撰写升级服务器规格选择更高性能的CPU、内存和带宽,以提供更好的处理能力和网络性能。优化网络配置调整网络接口卡(NIC)驱动,优化TCP/IP参数...

雷霆一击服务器管理员教程

本文转载莱卡云游戏服务器雷霆一击管理员教程(搜索莱卡云面版可搜到)首先你需要给服务器设置管理员密码,默认是空的管理员密码在启动页面进行设置设置完成后你需要重启服务器才可生效加入游戏后,点击键盘左上角E...

取消回复欢迎 发表评论: