一、首先说可用工具
1、jmap可以查看当前Java进程的内存占用,把内存快照dump出来
用法:jmap [option] <pid>
常用命令
jmap -heap pid
主要显示堆的内存使用情况,包括分代情况,每个代的总容量、已使用内存、可使用内存,如图:
jmap -dump:live,format=b,file=xxx.xxx [pid]
当前Java进程的内存占用情况导出来,用内存分析工具分析,如MAT
2、jstack可以查看线程运行情况,是否有死锁,cpu过高问题
用法:jstack [option] <pid>
常用命令
jstack -l pid 生成虚拟机当前时刻的线程快照
需要关注的状态:deadlock:死锁,blocked:线程被阻塞,
通过top命令定位到cpu占用率较高的线程之后,接着使用jstack pid命令来查看当前java进程的堆栈状态,将线程id转换成16进制来查看,建议隔段时间再执行一次stack命令,再一次获取thread dump,毕竟两次拍片结果(jstack)