线上故障快速定位及恢复
Java线程堆栈
Linux jstack命令
jstack 7756(Java进程号) > java.stack
Linux kill命令
kill -3 7756(Java进程号)
向JVM发送QUIT信号
Java线程
JVM创建线程
用户线程
main函数代表主线程
线程堆栈的第一行
1、java线程转换LINUX 内核库pthread即本地线程2、tid 语言层面的id比如Java 线程编号3、nid(Native Thread)运行在操作系统基础上的本地id
线程调用含义
堆栈信息其中一行的调用关系
pstatck 7756(Java进程号)
nid(16进制) == LWP(10进制)
16进制的nid
10进制的LWP(轻量级进程)
锁是否释放
wait() 会释放监视锁
sleep会占用锁
当一个线程占有一个锁时
堆栈会打印 -locked <Oxe7402c48>
当该线程等待别的线程释放该锁
堆栈会打印 -waiting to lock <Oxe7402c48>
如果代码中有wait调用
首先是locked 然后又会打印 waiting on <Oxe7402c48>这种会导致死锁即死循环 占用了锁等待其他锁
线程死锁
0时刻 线程0获取锁0 线程1获取锁1 2时刻 线程0获取锁1 线程1获取锁0 两个线程各得到锁 都等待对方的锁
Java堆栈直接给出死锁的结果
死锁报错
死锁详情
死锁情况分析导致CPU过高分析
方法1
步骤
为什么要去掉wait和sleep的线程 因为其不占用cpu资源
原因
方法2 TOP&堆栈方法(一次命中)
JNI是Java Native Interface
5578是java的进程号打印这个进程中所有线程cpu消耗倒叙排列 shit+hjstack把线程堆栈打印出来 里面有很多线程 其中有一个就等于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)
被挂起
Java线程堆栈
一次线程堆栈信息
多次线程堆栈
资源不足导致性能下降原因
大量线程停在同样的调用上下文中
原因
未及时释放连接的情况
多个锁导致的锁链分析
很多线程在等待不同的锁 有的锁竞争可能由于另外一个锁对象竞争导致 需要找到根源
案例分析
WebAPI性能瓶颈
线上表现
1、连接阻塞比较多RECQ(接收的队列)2、超时日志疯狂打印3、通过重启webapi进程临时缓解压力
解决步骤
线程A
线程B
线上故障处理方式
保留现场
比如通过jstack保存堆栈快照信息
恢复服务
第一时间恢复服务 比如restart、reboot
排查解决
验证
常规操作
重启
回滚
降级
摘机
现象收集&故障定位
潜在bug被激发的情况重启有效
故障排除&服务恢复
确定服务进程排查问题
CPU
top shift+p 按pid 进程编号升序shift+m 按占用内存大小降序
内存
free -g
内存
vmstat -n
tcp连接数量
netstat -aonp|grep tcp |wc -l
端口映射
netstat -natp|sort -m
磁盘情况
iostat -d 1
文件占用情况
ls -l /proc/*/fd
目标服务内观察
问题协查方法论
异常处理原则
错误永远无法避免 且发生的角度永远无法预期在故障发生时尽可能维持系统核心功能的可用性
线上故障快速定位及恢复相关推荐
- 线上故障如何快速排查?来看这套技巧大全
简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器.Java应用.数据库.Redis.网络和业务六个层面分享线上故障排查的思路和技巧.较长,同学们可收藏后再看. 前言 线 ...
- idea本地跑如何看gc日志_线上故障如何快速排查?来看这套技巧大全
简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器.Java应用.数据库.Redis.网络和业务六个层面分享线上故障排查的思路和技巧.较长,同学们可收藏后再看. 前言 线 ...
- du -sh 如何找到最大的文件夹_线上故障如何快速排查?来看这套技巧大全
简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器.Java应用.数据库.Redis.网络和业务六个层面分享线上故障排查的思路和技巧.较长,同学们可收藏后再看. 前言 线 ...
- 阿里技术:如何快速排查线上故障?
阿里技术:如何快速排查线上故障? 以下文章来源于阿里技术 ,作者小峯 阿里技术 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此. 有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从 ...
- 软件工程之美学习笔记三十八 37 | 遇到线上故障,你和高手的差距在哪里?
<软件工作之美>材料地址:https://time.geekbang.org/column/article/97219 遇到线上故障,新手和高手的差距在哪里? 新手遇到复杂的线上故障,不知 ...
- 牛掰!救火必备:线上故障排查套路大全
点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 线上故障主要会包括cpu.磁盘.内存以及网络问题,而 ...
- JAVA 线上故障排查套路,从 CPU、磁盘、内存、网络到GC 一条龙!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 线上故障主要会包括cpu.磁盘.内存以及网络问题,而大多数 ...
- JAVA 线上故障排查完整套路,从 CPU、磁盘、内存、网络、GC 一条龙!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:fredal https://fredal.xin/java ...
- JAVA 线上故障排查完整套路!牛掰!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源丨8rr.co/kV3R 线上故障主要会包括 CPU.磁盘.内 ...
最新文章
- lambda dict sort
- 微控制器和微处理器的区别
- 有米android sdk,有米积分墙Android SDK开发者常见问题
- C/C++之 C++ String(字符串)
- c语言某一行不被优化,C语言优化小技巧
- 什么是物理路径,相对路径,绝对路径以及根目录
- 【Android】关于参数的传递问题
- 【P1714】切蛋糕(单调队列)
- python编程是啥-学了Python编程之后,同是新手的他们做了什么?
- 赛尔译文 | 基础模型的机遇与风险 (四)
- PowerShell 远程连接与其它技巧
- 0308·付费专栏销售排行榜
- UiBot进行谷歌浏览器长截屏办法
- 由对称性知定点一定在x轴上_圆锥曲线中的定点定值问题的四种模型.doc
- 算法题目打卡:Ques20201012
- Pluralistic Image Completion—多元图像补全—摘要翻译—测试教程(附源码)——CVPR 2019
- 虾皮「光速大裁员」:7分钟大会后,软件瞬间查无此人
- excel中插入图表改变横纵坐标问题
- C++-点到点、点到线、共线等常用计算
- 小白MacBook超级实战教程——装双系统WIN10