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 查看哪个

Java创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

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查看哪个java进程负载高,记录其PID
  2. top -Hp 第1步的PID查看该进程所有线程的运行状态
  3. 记录下高负载的线程ID,printf "%x\n" 第1步的PID转换成16进制

2.2. 分析线程Dump文件

  1. jstack 第1步的PID > 文件,生成堆栈状态的jstack文件
  2. 在第4步的jstack文件中找到nid为第3步的16进制的线程ID
  3. 从堆栈中了解到线程在执行什么任务,并结合业务与代码判断问题所在

3. 线程死锁

3.1. 查找Java进程ID

有两种方法:

  • 使用top找出STATE为sleeping,COMMAND为java的PID
  • 使用jps

3.2. 分析线程Dump文件

jstack -l PID

分析是否由循环加锁的现象

4. JVM调优

调优思路.md

5. 参考