利用jmap工具查看堆内存活的且占内存空间最大的对象
jmap -histo:live pid | head -20
也可以将堆内存快照进行dump,再利用jhat工具分析
jmap -dump:live(只导出还存活的对象),fomat=b(二进制文件),file=‘文件路径‘ pid
jhat dump文件
jhat会启动一个微型的web服务器,暴露的是7000端口,
我们可以直接通过游览器访问,就能看到堆内具体的对象信息,一般在生产上都是将导出的对文件下载到本地进行 jhat,因为jhat会占用cpu和内存资源。
利用jstack查看最耗cup的线程
先根据 pid查询 最耗cpu的线程pid
top -Hp pid
再获取pid的16进制
printf(“%x\n”) 25307
62db
再利用查看线程当前的状态
jstack pid | grep 62db
但最香的还是阿里开源的jvm诊断工具-arthas,基本涵盖了jdk自带工具的功能,而且使用很方便,自身提供更多特性,如watch,tt,支持ognl表达式等等,便于我们更加方便的定位问题
http://arthas.gitee.io/