zoukankan      html  css  js  c++  java
  • 内核软死锁

    内核软死锁(soft lockup)

    转载自:
    CSDN静谧星空:https://blog.csdn.net/qq262593421/article/details/107142262

    参考地址:
    https://blog.csdn.net/sunny05296/article/details/82858071
    https://www.cnblogs.com/fusheng11711/p/10767190.html
    http://oenhan.com/kernel-deadlock-check

    虚拟机终端报死锁:

    [root@node1 ~]# 
    Message from syslogd@node1 at Jul 15 10:09:53 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#4 stuck for 35s! [kworker/4:2:530]
    
    Message from syslogd@node1 at Jul 15 10:09:54 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#2 stuck for 47s! [safe_timer:2422]
    
    Message from syslogd@node1 at Jul 15 10:09:54 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#3 stuck for 35s! [ms_pipe_write:2891]
    
    Message from syslogd@node1 at Jul 15 10:09:54 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#1 stuck for 35s! [tuned:1735]
    
    Message from syslogd@node1 at Jul 15 10:09:54 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#0 stuck for 47s! [tp_osd_tp:2676]
    
    Message from syslogd@node1 at Jul 15 10:09:54 ...
     kernel:NMI watchdog: BUG: soft lockup - CPU#5 stuck for 35s! [kworker/5:1:65]
    
    You have new mail in /var/spool/mail/root
    

    Soft lockup:这个bug没有让系统彻底死机,但是若干个进程(或者kernel thread)被锁死在了某个状态(一般在内核区域),很多情况下这个是由于内核锁的使用的问题。

    出现死锁原因

    1、CPU高负载时间过长
    2、服务器电源供电不足,导致CPU电压不稳定
    3、vcpus超过物理cpu cores
    4、虚机所在的宿主机的CPU太忙或磁盘IO太高
    5、虚机机的CPU太忙或磁盘IO太高
    6、VM网卡驱动存在bug,处理高水位流量时存在bug导致CPU死锁
    7、BIOS开启了超频,导致超频时电压不稳,容易出现CPU死锁
    8、Linux kernel或KVM存在bug
    9、BIOS Intel C-State开启导致,关闭可解决
    10、BIOS spread spectrum开启导致

    当主板上的时钟震荡发生器工作时,脉冲的尖峰会产生emi(电磁干扰)。spread spectrum(频展)设定功能可以降低脉冲发生器所产生的电磁干扰,脉冲波的尖峰会衰减为较为平滑的曲线。
    如果我们没有遇到电磁干扰问题,建议将此项设定为disabled,这栏可以优化系统的性能表现和稳定性;
    否则应该将此项设定为enabled。 如果对cpu进行超频,必须将此项禁用。因为即使是微小的脉冲值漂移也会导致超频运行的cpu锁死。CPU超频时,SPREAD SPECTRUM必须关闭,否则容易出现锁死cpu的情况。

    Linux内核死锁检测机制

    死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程。所以内核中设计了内核死锁检测机制,一旦发现死锁进程,就重启OS,快刀斩乱麻解决问题。之所以使用重启招数,还是在于分布式系统中可以容忍单点崩溃,不能容忍单点进程计算异常,否则进行死锁检测重启OS就得不偿失了。

    解决办法

    echo 30 > /proc/sys/kernel/watchdog_thresh
    echo "kernel.watchdog_thresh=30" >> /etc/sysctl.conf 
    sysctl -w kernel.watchdog_thresh=30
    sysctl -q vm.swappiness
    sysctl -p
    sudo systemctl stop mysqld
    sudo systemctl disable mysqld
    

    分布式系统最直接的方法是重启Linux,重新开启进程

  • 相关阅读:
    好代码收藏
    JVM
    关于Redis
    记录ok6410 使用ov9650摄像头的过程
    记录一下在uyuv 转 planar yuv420 的做法
    mini2440 使用的mkyaffs2image 工具的源码
    hi3516a imx178 uboot 默认启动参数
    记录ok6410 使用fast150u 无线网卡的过程 其中部分内容为转载 没有修改
    ubuntu建立tftp服务器有两种方式
    转载hi3516 sd 只读解决
  • 原文地址:https://www.cnblogs.com/bugutian/p/13322832.html
Copyright © 2011-2022 走看看