转自: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. maven直接饮用jar包的写法

    <dependency> <groupId>sample</groupId> <artifactId>com.sample</artifactId ...

  2. eclipse新建maven项目默认jre为1.5的问题

    在maven的settings.xml中添加如下内容解决 <profiles> <profile> <id>jdk-1.8</id> <activ ...

  3. jenkins 基本配置

    修改jenkins使用用户和启动端口 //yum 安装 cat /etc/sysconfig/jenkins 安装完后安装maven插件 设置jenkins项目存放目录 系统管理---->系统设 ...

  4. SQL Server日志过大,清理日志

    直接执行下面的代码 USE [master] GO ALTER DATABASE 数据库 SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE 数据库 ...

  5. JAVA-Clone 对象拷贝

    JAVA 中对象的赋值是复制对象的引用,即复制引用 public static void main(String[] args) { User user = new User(1,"asds ...

  6. 端口与进程-----Window cmd命令

    ********************  windows 篇 ********************** cmd命令: services.msc    打开本地服务页面 一.查看windows系统 ...

  7. mysql 常用的命令集合

    1.创建表 CREATE TABLE `cardPcitrue`( `id` INT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT'编号', `cId` IN ...

  8. ZOJ - 1610 Count the Colors(线段树区间更新)

    https://cn.vjudge.net/problem/ZOJ-1610 题意 给一个n,代表n次操作,接下来每次操作表示把[l,r]区间的线段涂成k的颜色其中,l,r,k的范围都是0到8000. ...

  9. 使用二分查找判断某个数在某个区间中--如何判断某个IP地址所属的地区

    一,问题描述 给定100万个区间对,假设这些区间对是互不重叠的,如何判断某个数属于哪个区间? 首先需要对区间的特性进行分析:区间是不是有序的?有序是指:后一个区间的起始位置要大于前一个区间的终点位置. ...

  10. 苹果手机上点击WEUI日期控件不容易点中

    主要问题是WEUI cells有Padding,而苹果手机一般屏幕较小,容易点不中导致的 <div class='weui_cell' style="padding-bottom:0p ...