NOTE
7.2 Java线上问题排查
1. 内存占用100% / 内存问题 1.1. 查找Java进程ID top 命令,按下 M 查看哪个java进程占用内存最高 1.2. 分析是否发生OOM OOM问题举例.md 2. CPU占用100% / 线程问题 2.1. 查找Java进程ID和线程ID 1. top 命令,按下 P 查看哪个
这是历史学习笔记,可能存在过时或不完整的理解。
1. 内存占用100% / 内存问题
1.1. 查找Java进程ID
top命令,按下M查看哪个java进程占用内存最高
1.2. 分析是否发生OOM
2. CPU占用100% / 线程问题
2.1. 查找Java进程ID和线程ID
top命令,按下P查看哪个java进程负载高,记录其PIDtop -Hp 第1步的PID查看该进程所有线程的运行状态- 记录下高负载的线程ID,
printf "%x\n" 第1步的PID转换成16进制
2.2. 分析线程Dump文件
jstack 第1步的PID > 文件,生成堆栈状态的jstack文件- 在第4步的jstack文件中找到
nid为第3步的16进制的线程ID - 从堆栈中了解到线程在执行什么任务,并结合业务与代码判断问题所在
3. 线程死锁
3.1. 查找Java进程ID
有两种方法:
- 使用
top找出STATE为sleeping,COMMAND为java的PID - 使用jps
3.2. 分析线程Dump文件
jstack -l PID
分析是否由循环加锁的现象