Linux死锁检测-Lockdep】的更多相关文章

关键词:LockDep.spinlock.mutex. lockdep是内核提供协助发现死锁问题的功能. 本文首先介绍何为lockdep,然后如何在内核使能lockdep,并简单分析内核lockdep相关代码. 最后构造不同死锁用例,并分析如何根据lockdep输出发现问题根源. 1. Lockdep介绍 死锁是指两个或多个进程因争夺资源而造成的互相等待的现象. 常见的死锁有如下两种: 递归死锁:中断等延迟操作中使用了锁,和外面的锁构成了递归死锁. AB-BA死锁:多个锁因处理不当而引发死锁,多…
转自:http://www.cnblogs.com/mumuxinfei/p/4365697.html 前言:  上一篇博文讲述了pstack的使用和原理. 和jstack一样, pstack能获取进程的线程堆栈快照, 方便检验和性能评估. 但jstack功能更加的强大, 它能对潜在的死锁予以提示, 而pstack只提供了线索, 需要gdb进一步的确定.  那Linux下, 如何去检测死锁, 如何让死锁的检测能够更加的智能和方便? 这是本文的核心主旨, 让我们一同分享下思路. 常规做法: 我们来…
前言: 上一篇博文讲述了pstack的使用和原理. 和jstack一样, pstack能获取进程的线程堆栈快照, 方便检验和性能评估. 但jstack功能更加的强大, 它能对潜在的死锁予以提示, 而pstack只提供了线索, 需要gdb进一步的确定. 那Linux下, 如何去检测死锁, 如何让死锁的检测能够更加的智能和方便? 这是本文的核心主旨, 让我们一同分享下思路. 常规做法: 我们来模拟一个出现死锁的程序, 然后通过常规方式来确定是否出现了死锁, 以及在那些线程上出现的. 如下是经典的死锁…
摘要:除了多核的自旋锁机制,本文会介绍下LiteOS 5.0引入的LockDep死锁检测特性. 2020年12月发布的LiteOS 5.0推出了全新的内核,支持SMP多核调度功能.想学习SMP多核调度功能,需要了解下SpinLock自旋锁.除了多核的自旋锁机制,本文还会介绍下LiteOS 5.0引入的LockDep死锁检测特性. 本文中所涉及的LiteOS源码,均可以在LiteOS开源站点https://gitee.com/LiteOS/LiteOS 获取. 自旋锁SpinLock源代码.开发文…
转自:http://www.oenhan.com/kernel-deadlock-check 死锁就是多个进程(线程)因为等待别的进程已占有的自己所需要的资源而陷入阻塞的一种状态,死锁状态一旦形成,进程本身是解决不了的,需要外在的推动,才能解决,最重要的是死锁不仅仅影响进程业务,而且还会占用系统资源,影响其他进程.所以内核中设计了内核死锁检测机制,一旦发现死锁进程,就重启OS,快刀斩乱麻解决问题.之所以使用重启招数,还是在于分布式系统中可以容忍单点崩溃,不能容忍单点进程计算异常,否则进行死锁检测…
转自:http://www.blog.chinaunix.net/uid-25942458-id-3823545.html 死锁:就是多个进程(≥2)因为争夺资源而相互等待的一种现象,若无外力推动,将无法继续运行下去.注意,只有在多进程或者多线程之间或者他们与中断之间相互通讯或者共享资源才有可能发生死锁,单线程或者进程之间没有联系的话,一般不会发生死锁.锁的种类比较多,这里主要说自旋锁和信号量.两者的差别就在于前者获得不到资源时的动作是不断的资源(即忙转浪费cpu的cycles)而后者则表现为睡…
在大量的客户端,更新数据表的同一行时,会造成数据库的吞吐量大幅降低. 很多数据库的前辈和同行分别通过实验和源码的方法,定位到了罪魁祸首----MySQL死锁检测 实验方式:http://blog.csdn.net/zhaiwx1987/article/details/6952285 源码方式:http://www.gpfeng.com/?p=426 请大家尤其注意这段代码 ##### lock_mutex_enter(); ut_ad(lock_table_has(thr_get_trx(thr…
14.3.5.2 Deadlock Detection and Rollback 死锁检测和回滚: InnoDB 自动检查四艘,回滚一个事务或者事务来打破死锁. InnoDB 试图选择小的事务来回滚, 事务的大小是由 插入 修改 或者删除的记录数决定 InnoDB 知道 表锁 如果 innodb_table_locks = 1 (the default) ,autocommit = 0 MySQL layer 上面只是关于 row-level locks. 否则,InnoDB 不能检测到死锁 当…
一.死锁的概念: 1.死锁的现象描述: 在很多应用中,需要一个进程排他性的访问若干种资源而不是一种.例如,两个进程准备分别将扫描的文档记录到CD上.进程A请求使用扫描仪, 并被授权使用.但进程B首先请求CD刻录机,也被授权使用.这时,A请求使用CD刻录机,但这个请求在B释放CD刻录机前会被拒绝.但是,进程B非但 不会释放CD刻录机,还去请求扫描仪.这时,两个进程僵持不下,都被阻塞,并一直处于这样的状态.这种状况就叫做死锁(deadlock). 2.死锁的规范定义: 如果一个进程集合中的每个进程都…
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数,可以锁整个文件,不能锁文件中的一部分. fcntl函数,增加了记录锁的功能. lockf函数,在fcntl基础上构造了lockf函数,提供一个简化的接口.可以锁文件中任意字节数的区域 三.fcntl 记录锁 函数原型: int fcntl(int fd, int cmd, struct flock…
Linux  入侵检测小结 0x00 审计命令 在linux中有5个用于审计的命令: last:这个命令可用于查看我们系统的成功登录.关机.重启等情况:这个命令就是将/var/log/wtmp文件格式化输出. lastb:这个命令用于查看登录失败的情况:这个命令就是将/var/log/btmp文件格式化输出. lastlog:这个命令用于查看用户上一次的登录情况:这个命令就是将/var/log/lastlog文件格式化输出. who:这个命令用户查看当前登录系统的情况:这个命令就是将/var/l…
这一篇主要是通过一个实验来进行描述,过程是比较枯燥的. 实验准备 create table test_lock(id int auto_increment primary key ,stock int) engine=innodb; insert into test_lock(id,stock) value(1,50); 这里我把堆栈信息尽可能的简化,25个主要函数的名称和入参 后面为了突出主题,我对事务相关的函数加上这个开头死锁检测函数列表,一共10个函数   死锁检测函数列表A row_se…
转自:http://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network-cable-connector You want to look at the nodes in /sys/class/net/ I experimented with mine: Wire Plugged in: eth0/carrier:1eth0/operstate:unknown Wire…
http://blog.chinaunix.net/space.php?uid=20357359&do=blog&cuid=1798479 Linux下检测网卡与网线连接状态,使用ioctl向socket发送SIOCETHTOOL命令字. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <errno.h>…
当前数据库普遍使用wait-for graph等待图来进行死锁检测 较超时机制,这是一种更主动的死锁检测方式,innodb引擎也采用wait-for graph SQL Server也使用wait-for graph wait-for graph要求数据库保存两种信息 锁的信息链表 事务等待链表 通过上面链表构造出一张图,图中若存在回路,就代表存在死锁,资源间发生相互等待. mysql技术内幕 innodb存储引擎 f f f f…
最近碰到“TOO DEEP OR LONG SEARCH IN THE LOCK TABLE WAITS-FOR GRAPH, WE WILL ROLL BACK FOLLOWING TRANSACTION”. 重新温习下受益良多,其中死锁的判定规则,其实我们早在5年前解决秒杀场景的第一个版本就已经涉及,并且思路很相似,如果有时间的话,我会补充上一批文章说下如果关闭死锁检测对单行更新能提升多少性能. 下面这一段代码展示的是: “ If the LATEST DETECTED DEADLOCK s…
//死锁检测 .load sosex.dll :> !dlk :> !mk -a The mk command displays a call stack of the currently selected thread (including both managed and unmanaged frames). The command has now been extended to support the -a switch which outputs both the local var…
@参考文章 原文如下: linux本地检测如何tomcat是否启动成功? 解决方法: 1.curl 127.0.0.1:8080 第一可以知道本地是否可以访问tomcat,返回页面代码 2.tail -f ./catalina.out 查看tomcat的logs目录下的catalina.out文件,看到末尾有 22-Jun-2018 12:39:50.343 INFO [main] org.apache.catalina.startup.Catalina.start Server startup…
行锁顾名思义,就是针对单行数据加锁,在mysql中,锁的实现是由引擎层实现的,MyISAM引擎就不支持行锁 不支持行锁就意味着并发控制只能使用表锁,也就是说同一时间,在这个表上只能有一个更新在执行,这就会 影响到业务的并发度.InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一. 两阶段锁协议 先举个例子,事务B的语句执行的时候会发生什么现象?这取决于事务A在执行完两条语句后持有那些锁,以及在什么时候释放? 大家可以自己做个实验,是这样的,事务B在执行这条语句时会被阻塞,…
文章图片来自参考资料 MySQL 的锁     根据加锁的范围,MySQL里面的锁大致可以分成全局锁.表级锁和行锁三类.我们需要明白锁的服务是为了数据统一,或者说是事务,数据隔离. 全局锁     全局锁是范围最大的锁,锁住了所有,全局锁的典型使用场景是,做全库逻辑备份.也就是把整库每个表都select出来存成文本.     总结来自参考资料 使用场景:全库逻辑备份. 风险: 1.如果在主库备份,在备份期间不能更新,业务停摆 2.如果在从库备份,备份期间不能执行主库同步的binlog,导致主从延…
问题说明:在公司办公网内的一台物理机A上安装了linux系统(ip:192.168.9.120),在上面部署了jenkins,redmine,svn程序.由于是在办公网内,这台机器和同事电脑都是在同一网段的.突然某天问题出来了:有部分同事远程ssh登陆不上这台linux系统的机器,jenkins/redmine/svn也登陆不上,其他部分同事可以正常使用. 后来发现,是因为这台linux机器的ip被人占用了,ip地址冲突引起的!! 下面介绍下检查ip地址是否冲突的方法:-------------…
RKHunter是Linux系统平台下的一款开源入侵检测工具 特点 (1)安装便捷,运行快速 (2)扫描范围全,能够检测各种已知的rootkit特征码.端口扫描.常用程序文件的变动情况检查 主要功能 (1)MD5校验测试,检测任何文件是否改动 (2)检测rootkits使用的二进制和系统工具文件 (3)检测木马程序的特征码 (4)检测大多常用程序的文件异常属性 (5)扫描任何混杂模式下的接口和后门程序常用的端口 (6)检测如/etc/rc.d/目录下的所有配置文件.日志文件.任何异常的隐藏文件等…
一. 系统状态备份 主要是网络.服务.端口.进程等状态信息的备份工作 系统服务备份: chkconfig --list > services.log 进程备份: ps -ef > ps.log 监听端口备份: netstat -utnpl > port-listen.log 系统所有端口情况: netstat -ano > port-all.log 二. 断开和限制对外连接 iptables -A OUTPUT -o lo -j ACCEPT 允许本机访问本机 iptables -…
这个问题看起来好像很简单,"ps -ef | grep xx"一下就行啦!这样做当然可以,但是如果我们考究起性能来,这恐怕不是个好办法. 假设我们现在要监测某进程是否存活,每分钟检查一次,用上面的办法就要每分钟运行一次ps命令并且做一次grep正则查找.这点开销在服务器上似乎不算什么,然而如果我们要在同一节点上同时监测数十个.数百个这样的进程又如何呢?所以,我们有必要从性能的角度出发,发掘一些更好的办法.   对于daemon进程,通常都会有自己的pid或者lock文件,我们可以检查这…
之前的文章应用 Valgrind 发现 Linux 程序的内存问题中介绍了利用Linux系统工具valgrind检测内存泄露的简单用法,本文实现了一个检测内存泄露的工具,包括了原理说明以及实现细节. 该两篇文章皆来自IBM社区(建议阅读原文),本文地址:https://www.ibm.com/developerworks/cn/linux/l-mleak/ 简述 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 C++ 中的 new 和 delete 的基本…
参考:http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html 几乎是照抄参考过来的,只不过后面自己调试一下代码. 这里主要介绍Valgrind的一些简单用法.更多详细的使用方法可以访问valgrind的主页:http://www.valgrind.org Valgrind是Julian Seward的作品.Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核,一个软件合成的CPU,和一系列的…
本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题.作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类. 1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程…
显示磁盘和闪存的信息,以及分区信息 [root@bogon shell]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes…
一.检查系统日志 检查系统错误登陆日志,统计IP重试次数 # 这里使用了lastb命令,该命令需要root权限,可以显示所有登陆信息.这里仅仅显示的root用户的,读者可以更具实际情况自行确定,或者直接全部都显示,你会有不一样的收获,每个人的脚本都不一样,更具实际情况自行编写. # lastb root | awk '{print $3}' | sort | uniq -c | sort -nr| more 以下是我部署在阿里云上主机被多次扫描的日志 isadmin  ssh:notty   …
转自:http://www.cnblogs.com/itech/archive/2011/06/08/2075145.html 一 .uptime uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况. uptime的输出包含一项内容是load average,显示了最近1,5,15分钟的负荷情况.它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,load average值会升高:反之则会降低.load average的最佳值是1,说明每个进…