线上故障快速定位及恢复(上)

简介: 线上故障快速定位及恢复(上)

Java线程堆栈

  • Linux jstack命令
jstack 7756(Java进程号) > java.stack
  • Linux kill命令
kill -3 7756(Java进程号)
向JVM发送QUIT信号


Java线程


  • JVM创建线程


  • 用户线程
main函数代表主线程
  • 线程堆栈的第一行

image.png

image.png

image.png


  • 当一个线程占有一个锁时
堆栈会打印 -locked <Oxe7402c48>
  • 当该线程等待别的线程释放该锁
堆栈会打印 -waiting to lock <Oxe7402c48>
  • 如果代码中有wait调用
首先是locked 然后又会打印 waiting on <Oxe7402c48>
这种会导致死锁即死循环 占用了锁等待其他锁


线程死锁


image.png

0时刻 线程0获取锁0 线程1获取锁1 
2时刻 线程0获取锁1 线程1获取锁0 
两个线程各得到锁 都等待对方的锁


Java堆栈直接给出死锁的结果


死锁报错

image.png

死锁情况分析导致CPU过高分析


方法1

步骤

image.png


方法2 TOP&堆栈方法(一次命中)


image.png

5578是java的进程号
打印这个进程中所有线程
cpu消耗倒叙排列 shit+h
jstack把线程堆栈打印出来 里面有很多线程 其中有一个就等于cpu消耗最多的那个pid
就可以直接定位到这行代码有问题


不消耗CPU的线程状态


  • JVM的RUNNABLE状态
网络IO不消耗CPU 是同步阻塞的过程
  • TIMED_WAITING(on object monitor)
obj.wait(time)
  • TIMED_WAITING(sleeping)
Thread.sleep(time)
  • TIMED_WAITING(parking)
被挂起
  • WAITING(on object monitor)
obj.wait()
通过notify()唤醒
  • BLOCKED (on object monitor)
等待监视锁
  • WAITING(parking)
被挂起
相关文章
|
SQL 监控 网络协议
线上故障如何快速排查?来看这套技巧大全
有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器、Java应用、数据库、Redis、网络和业务六个层面分享线上故障排查的思路和技巧。较长,同学们可收藏后再看。
线上故障如何快速排查?来看这套技巧大全
|
4月前
|
运维 监控 定位技术
故障转移和自动恢复
故障转移和自动恢复
137 1
|
5月前
|
运维 监控 Kubernetes
中间件故障转移自动切换
【7月更文挑战第25天】
44 2
|
7月前
|
运维 监控
线上故障的正确打开方式
线上故障的正确打开方式
109 0
|
监控 容灾 安全
系统总出故障怎么办?
系统总出故障怎么办?
109 0
|
7月前
|
运维 监控 Java
线上故障突突突?如何紧急诊断、排查与恢复
本文简单介绍了阿里云上关于故障恢复、诊断的一些最佳实践。
线上故障突突突?如何紧急诊断、排查与恢复
|
运维 Java
线上故障快速定位及恢复(下)
线上故障快速定位及恢复(下)
191 0
线上故障快速定位及恢复(下)
|
监控
smartctl定位磁盘故障信息
​ Smartctl(S.M.A.R.T 自监控,分析和报告技术)是用于查看和检测磁盘硬件信息的工具,可以打印SMART自检和错误日志,启用并禁用SMRAT自动检测,以及初始化设备自检。服务器环境中,一般磁盘都是通过RAID卡挂载,如果配置了直通模式,则可以直接使用smartctl查询磁盘信息,如果非直通模式则需要调用raid卡对应接口才可以查询
21151 2
|
NoSQL Java Redis
线上系统打日志你了解多少?
以上文章讲述的是【Redis入门知识点】接下来我总结一下【线上系统打如何正确打日志】。