死锁的排查、OOM排查

前言:死锁和oom的排查都是使用这些工具:

性能诊断工具对比+Prometheus(普罗米修斯)监控系统学习-CSDN博客

一、死锁的排查、解决参考博客:

死锁检测的常用3种方法 jstack+jconsole+jvisualvm

死锁的排查方法和排查工具有哪些?_怎么排查死锁_猫头虎的博客-CSDN博客

什么是死锁?怎么排查死锁?怎么避免死锁?_如何排查死锁_小林coding的博客-CSDN博客

产生死锁的必要条件?
死锁的产生是必须要满足一些特定条件的:
• 互斥条件:某资源只能被一个进程使用,其他进程请求该资源时,只能等待,直到资源使用完毕后释放资源。
• 请求和保持条件:程序已经保持了至少一个资源,但是又提出了新要求,而这个资源被其它进程占用,自己占用资源却保持不放。
• 不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用。
• 循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

处理死锁思路?
• 预防死锁:破坏死锁的四个条件中的一个或多个来预防死锁。但不能破坏互斥条件,其他三个都可。
• 避免死锁:和预防死锁的区别就是,在资源动态分配过程中,用某种方式阻止系统进入不安全状态。比如银行家算法。
• 检测死锁:允许系统在运行过程中发生死锁,但可已设置检测机构及时检测死锁的发生,并采取适当措施加以清除。
• 解除死锁:发生死锁后,采取适当措施将进程从死锁状态中解脱出来。解除死锁主要方法:资源剥夺法,撤销进程法,进程回退法。

预防死锁的方法:
破坏请求和保持条件:1、一次性申请所有资源,之后不再申请资源,如果不满足资源条件则得不到资源分配。2、只获得初期资源运行,之后将运行完的资源释放,请求新的资源。
破坏不可剥夺条件:当一个进程获得某种不可抢占资源,提出新的资源申请,若不能满足,则释放所有资源,以后需要,再次重新申请。
破坏循环等待条件:对进程进行排号,按照序号递增的顺序请求资源。若进程获得序号高的资源想要获取序号低的资源,就需要先释放序号高的资源。

避免死锁的方法:
银行家算法
我们可以把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于客户向银行家申请贷款。
为保证资金的安全,银行家规定:
1. 当一个客户对资金的最大需求量不超过银行家现有的资金时就可以接纳该用户;
2. 客户可以分期贷款,但贷款的总数不能超过最大需求量;
3. 当银行家现有的资金不能满足客户需求的贷款数额时,对客户的贷款可推迟支付,但总能使客户在有限的时间里得到贷款;
4. 当客户得到所需的全部资金后,一定能在有限的时间里归还所有的资金。
操作系统按照银行家指定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量,则按当前的申请量分配资源,否则就推迟分配,当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量,若超过则拒绝分配进程,若能满足则按当前的申请量分配资源,否则也要推迟分配。

解除死锁的方法:
1.资源剥夺:挂起某些死锁进程,并抢占它的资源,讲这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到进程,而处于资源匮乏状态。
2. 终止(撤销)进程:强制将一个或多个死锁进程终止(撤销)并剥夺这些进程的资源,直至打破循环环路,使系统从死锁状态中解脱出来。撤销的原则可以按照进程的优先级和撤销进程代价的高低进行。
3、进程回退:让一个或多个进程回退到足以避免回避死锁的地步,进程回退时资源释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。
 

二、OOM排查参考博客:

1、使用top命令看一下线上的CPU、内存是否正常。

2、定位异常进程,看日志。

3、如果是OOM,用jstat -gc pid 1000 100(每秒)监控JVM内存运行状况和gc频率。

4、jmap -dump:live,format=b,file=dump3.hprof pid ,使用jmap dump内存快照。

5、使用MAT工具进行分析。

一次线上OOM过程的排查_接口mtop_AlbenXie的博客-CSDN博客

线上OOM异常案例及排查过程:jvisualvm分析 + 启动脚本里面加了 -XX:HeapDumpPath=./gcLog/java_%p_%t.hprof -XX:+HeapDumpOnOutOfMemoryError

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值