1. 线程运行诊断
CPU占用过多
定位:
- 用top定位哪个进程对cpu占用过高
- ps H -eo pid, tid, %cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高)
- jstack进程id:可以根据线程id找到有问题的线程,进一步定位到问题代码的源码行号
2. 本地方法栈

- Native Method Stacks:本地方法栈
- 解释:本地方法就是那些不是由Java代码编写的方法,因为Java代码有限制,有些情况下不能和操作系统底层进行交互,所以就需要由C 或 C++ 编写的本地方法来与操作系统打交道,所以本地方法执行时候所使用的就是本地方法栈
- 作用:为本地方法的运行提供内存空间
3. 堆(Heap)
- 通过new关键字,创建对象都会使用堆内存
- 特点:
- 它是线程共享的,堆中对象都需要考虑线程安全的问题
- 有垃圾回收机制
4. 堆内存溢出
- OutOfMemoryError:Java heap space
- 不断产生对象,且对象被使用(不会被回收),对象堆积会造成堆内存溢出
5. 堆内存诊断
- jps工具
- 查看当前系统中有哪些Java进程
- jmap工具
- 查看堆内存占用情况 jmap -heap 进程id(查询当前时刻,不能连续监测)
- jconsole工具
- 图形界面,多动能的监测工具,可以连续监测
