转自:https://blog.csdn.net/divlee130/article/details/47806551

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/divlee130/article/details/47806551
软死锁问题定位分析。
现象:服务器软死锁,增量数据无法下发。一直报cpu soft lockup

1.通过kxfr日志确认出问题出现的地方
通过对服务器分析可以看到出现问题的地方都是下发配置kxfr_id=2202438的地方由此大概定位出问题的域名。

2.进一步分析机器内核信息可以看到如下kxfr_add_rdset流程出了问题。

按理说简单的遍历比较不会出问题。这里怎么会有问题呢。没有思路看看crash吧。到网上学习
http://blog.csdn.net/fishermandong/article/details/12112381

进一步通过crash相应的命令查看find_rdset汇编代码并对照源码分析相应的内存信息。

分析到此处我们只需要知道R9里面的内容是什么即可
查看栈信息得知R9里面的内容为ffff881042ac5ce0这里个地址里面的内容减去0X38就是上面的RDSET的内容!首先查看R9寄存器内容得到地址ffff88085076de78所以我们查看ffff88085076de40地址里面的内容。

查看相应的内存中信息如下,可以看到相应的内存中的信息。正是我们猜的struct dns_rdset信息,可以看到相应的id 为317842中的数据有问题。发现他的指针prev 和next居然是自己这里面肯定有问题。

再进一步分析查看这个RDSET上一级rrset 信息,正式我们所猜测的的lianzhaobox.com这个域名!到此为止基本上可以确定这个问题是这个节点打环了。

那是什么原因打环呢。我们继续分析如下。

在代码中打印调试信息如下。
正如我们所料ffff88081371cd78这里面的数据已经有问题。里面打环的信息不止这一个我们找到第一个出现问题的点。

这个是第一次出现时刻的数据贴出相应的代码

可以看到里面有2个RDSET_ID相同的节点,通过进一步分析得知这个是增加KXFR_ID为2201768的时候出的问题,该流程如下首先查看是否存在相应的RDSET可以看出他找到了。然后走MNT流程,然后根据当前下发bitmap,判断rrset->view[i]相应的为是否等于找到的rdset,如果不相等就减相应的计数当计数减到0时释放相应的rdset,注意此时释放的是后一个rdset节点,所以经过释放后链表中只有一个节点了。而内核中巧合又将这个节点加入链表。由此出现问题。

这个问题出现的概率很小首先系统中同一个RDSET_ID如果已经配置,出现ADDRDSET的流程是不会有的。我们会生成MNTRDSET,或者DELCHILD,出问题的这个是用户批量操作的时候出现的问题, 而且恰好内存中只能有2个节点,再次触发ADDRDSET流程且命中的节点不是释放的节点时才会出现。且2个节点的bitmap必须互斥。

需要说明的是如果一个链表已经在链上了并且只有一个节点如果再次将自己加入节点肯定会有问题的。

修复办法

前端严格按照 线路 domain bitmap type 生成rdset_id 像图中的情况bitmap不同时rdset_id相同这个是不正确的。另外后面的ADDRDSET正常来说应该是MNTRDSET,但是我们给生成的确是ADDRDSET。

后端修复

如果是ADDRDSET流程,如果已经找到了则不再增加到相应RDSET链表。正常情况下是不会有这个流程的,ADDRDSET流程一般都不会找到相应的节点。都会重新分配内存。

后记
通过对这次问题分析让我体会很深刻。开始就分析代码始终想不通一个链表怎么会死锁。总结一点出现问题通过对问题的复现很重要。往往没有经过复现的分析都是不对的。还好我们选择了利用现网资源复现该问题。从而打印出相应出问题的关键点。如果自己构造是不可能构造出来这个问题的。
---------------------
作者:divlee130
来源:CSDN
原文:https://blog.csdn.net/divlee130/article/details/47806551
版权声明:本文为博主原创文章,转载请附上博文链接!

利用crash 分析软死锁问题【转】的更多相关文章

  1. 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏

    Windbg的一些简单使用命令 一.崩溃 1.  输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2.  查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame  0,切到第0 ...

  2. iOS --------Crash 分析(一)

    iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹 ...

  3. iOS Crash 分析 符号化崩溃日志

    参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhack ...

  4. 利用dotnet-dump分析docker容器内存泄露

    目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...

  5. iOS开发之Crash分析,以及收集

    一  先谈谈iOS的Crash收集方式: 1. APP 发生crash,用户手机手机上肯定会有crash纪录,当然删除了该app,或是删了再装 crash纪录还是没了. 2. 如果用户设置-隐私  同 ...

  6. 线上centos6出现软死锁 kernel:BUG: soft lockup

    线上centos6出现软死锁 kernel:BUG: soft lockup 今天线上一台centos6机器用xshell一直连接不上,然后在xshell上显示 Message from syslog ...

  7. 利用BLKTRACE分析IO性能

    在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...

  8. 利用 SPICE 分析理解心电图前端中的右腿驱动

      [导读] 心电图(ECG)学是一门将心脏离子去极(ionic depolarization) 后转换为分析用可测量电信号的科学.模拟电子接口到电极/患者设计中最为常见的难题之一便是优化右腿驱动 ( ...

  9. Java性能调优:利用JMC分析性能

    Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...

随机推荐

  1. JSON的简单使用_向前台发送JSON数据

    转自:http://www.cnblogs.com/digdeep/p/5574366.html 1.前台页面 <%@ page language="java" conten ...

  2. Maven 本地资源库配置

    Maven 本地资源库配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.操作系统环境 1>.查看操作系统环境(总共3台虚拟机) 2>.关闭防火墙并禁用开机自启动( ...

  3. 分析JVM GC Dump 工具

    GC 日志分析工具: http://gceasy.io/ JVM Dump 文件分析工具: IBM HeapAnalyzer

  4. Linux记录-sysctl.conf优化方案

    Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...

  5. ruby读取exce文件,使用roo---Gem

    module SEquipsHelper #设备台账,从excel文件读取信息 require 'roo' #require 'roo-xls' #读取excel文件 # SEquipsHelper. ...

  6. java定时器实现总结

    前言:Java定时器目前主要有3种实现方式:JDK组件,Spring Task,Quartz框架. 1. JDK组件(1) java.util.TimerTask MyTimerTask.java: ...

  7. ASP.NET MVC 4 笔记

    1.   MVC2.MV3.MC4 的区别 1)   MVC2 1.   View 文件以*.aspx结尾,为原始html页面内容. 2.   View 代码以<%代码-结束%>. 2)  ...

  8. 【python小练】0017-将xls文件内容写入xml文件中

    第 0017 题: 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如 下所示: <?xml version="1.0" ...

  9. 【演变】Ajax(AjAj)到WebSocket

    提出问题:A  =>  服务器  =>  B           B端浏览器如何知道服务器有A发来的数据? 解决方案: 第1种:频繁轮询    间隔1秒B向服务器讨要数据,就算数据为空.[ ...

  10. 使用PHP连接数据库实现留言板功能

    PHP实现留言板功能: 1 首先是登录页面: <!DOCTYPE html><html>    <head>        <meta charset=&qu ...