Java线程堆栈
- Linux jstack命令
- Linux kill命令
Java线程
- JVM创建线程
- 用户线程
- 线程堆栈的第一行
- 线程调用含义
堆栈信息其中一行的调用关系
- pstatck 7756(Java进程号)
16进制的nid
10进制的LWP(轻量级进程)
锁是否释放
- wait() 会释放监视锁
- sleep会占用锁
- 当一个线程占有一个锁时
- 当该线程等待别的线程释放该锁
- 如果代码中有wait调用
线程死锁
Java堆栈直接给出死锁的结果
死锁报错
死锁详情
死锁情况分析导致CPU过高分析
方法1
步骤
原因
方法2 TOP&堆栈方法(一次命中)
不消耗CPU的线程状态
- JVM的RUNNABLE状态
- TIMED_WAITING(on object monitor)
- TIMED_WAITING(sleeping)
- TIMED_WAITING(parking)
- WAITING(on object monitor)
- BLOCKED (on object monitor)
- WAITING(parking)
Java线程堆栈
- 一次线程堆栈信息
- 多次线程堆栈
资源不足导致性能下降原因
原因
未及时释放连接的情况
多个锁导致的锁链分析
案例分析
WebAPI性能瓶颈
线上表现
解决步骤
线程A
线程B
线上故障处理方式
- 保留现场
- 恢复服务
- 排查解决
- 验证
常规操作
- 重启
- 回滚
- 降级
- 摘机
现象收集&故障定位
故障排除&服务恢复
确定服务进程排查问题
CPU
内存
内存
tcp连接数量
端口映射
磁盘情况
文件占用情况
目标服务内观察
问题协查方法论
异常处理原则