利用crash 分析软死锁问题【转】
转自: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 分析软死锁问题【转】的更多相关文章
- 利用windbg分析崩溃,句柄泄漏,死锁,CPU高,内存泄漏
Windbg的一些简单使用命令 一.崩溃 1. 输入.ecxr;kbn得到崩溃的堆栈 其中源代码如下 2. 查看堆栈和源代码,发现第0帧导致崩溃,代码也是本地代码 输入.frame 0,切到第0 ...
- iOS --------Crash 分析(一)
iOS Crash 分析(文一)- 开始 1. 名词解释 1. UUID 一个字符串,在iOS上每个可执行文件或库文件都包含至少一个UUID.目的是为了唯一识别这个文件. 2. dwarfdump 苹 ...
- iOS Crash 分析 符号化崩溃日志
参考: http://blog.csdn.net/diyagoanyhacker/article/details/41247367 http://blog.csdn.net/diyagoanyhack ...
- 利用dotnet-dump分析docker容器内存泄露
目录 一 运行官方示例 1,Clone代码并编译 2,创建Dockerfile构建镜像 3,启动容器 二 生成dump转储文件 1,制造问题 2,创建dump文件 三 分析dump文件 1,创建一个用 ...
- iOS开发之Crash分析,以及收集
一 先谈谈iOS的Crash收集方式: 1. APP 发生crash,用户手机手机上肯定会有crash纪录,当然删除了该app,或是删了再装 crash纪录还是没了. 2. 如果用户设置-隐私 同 ...
- 线上centos6出现软死锁 kernel:BUG: soft lockup
线上centos6出现软死锁 kernel:BUG: soft lockup 今天线上一台centos6机器用xshell一直连接不上,然后在xshell上显示 Message from syslog ...
- 利用BLKTRACE分析IO性能
在Linux系统上,如果I/O发生性能问题,有没有办法进一步定位故障位置呢?iostat等最常用的工具肯定是指望不上的,[容易被误读的iostat]一文中解释过await表示单个I/O所需的平均时间, ...
- 利用 SPICE 分析理解心电图前端中的右腿驱动
[导读] 心电图(ECG)学是一门将心脏离子去极(ionic depolarization) 后转换为分析用可测量电信号的科学.模拟电子接口到电极/患者设计中最为常见的难题之一便是优化右腿驱动 ( ...
- Java性能调优:利用JMC分析性能
Java性能调优作为大型分布式系统提供高性能服务的必修课,其重要性不言而喻. 好的分析工具能起到事半功倍的效果,利用分析利器JMC.JFR,可以实现性能问题的准确定位. 本文主要阐述如何利用JMC分析 ...
随机推荐
- 面向对象+jquery实现拖拽功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Ubuntu Server 16.04 安装MySQL并设置远程访问
Ubuntu Server 16.04 安装MySQL 1. 使用root账号 sudo apt-get install mysql-serversudo apt-get install mysql- ...
- Uncaught DOMException: Failed to construct 'WebSocket': The URL '/qibao/websocket/service1000' is invalid.
出现这个问题是构造 WebSocket失败了. js代码改成 //实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接//等同于socket = new WebSocket(path+ ...
- Docker 从入门到放弃(二)容器使用
Docker 容器使用 一.Docker 客户端 docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项. root@iZ235mi4a64Z ...
- python-虚拟环境搭建
虚拟环境 需求: --公司之有一台服务器 -目前运行这一个5年前开发的Django项目,基于1.5 -现在要基于Django2.0开发一套程序 ...
- 【五】服务熔断、降级 —— Hystrix(豪猪)
分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖,每个依赖关系将在某些时候将不可避免地失败. 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务 B和微服务 ...
- IDApython教程(五)
我们继续IDAPython让生活更美好序列,这一部分我们解决逆向工程师日常遇到的问题:提取执行的内嵌代码. 恶意软件会用各种方式存储内嵌可执行代码,有些恶意软件将内嵌代码加到文件附加段,包括PE资源区 ...
- alexnet- tensorflow
alexnet 在 imagenet上夺冠是卷积神经网络如今这么火热的起点. 虽然卷积神经网络很早就被提出来,但是由于计算能力和各方面原因,没有得到关注. alexnet 为什么能取得这么好的成绩,它 ...
- TensorFlow从入门到理解
一.<莫烦Python>学习笔记: TensorFlow从入门到理解(一):搭建开发环境[基于Ubuntu18.04] TensorFlow从入门到理解(二):你的第一个神经网络 Tens ...
- Python简介(2017-07-16)
2017-07-15,这是我学习python的第一天. 首先,python是一门当下很火热的开发语言,它的创始人是Guido Van Rossum.就目前情况而言,python语言的热度持续上升,已经 ...