如何 dump jvm 内存及线程栈

1. dump jvm 内存

命令格式:

jmap -dump:format=b,file=dump_file_name pid

jmap -dump:live,format=b,file=heap.hprof 27019

举例:dump pid 为 3239 的 java 进程的内存到 aa.txt 文件

jmap -F -dump:format=b,file=aa.txt 3239

2. dump jvm 线程栈
命令格式:

jstack pid > dump_file_name

举例:dump pid 为 3239 的 java 进程的线程栈到 bb.txt 文件

jstack  -F 3239 > bb.txt

 

说明:-F 代表强制

 3.jstat:用于输出java程序内存使用情况,包括新生代、老年代、元数据区容量、垃圾回收情况。

 jstat -gcutil 27019 2000 5 代表 每2000毫秒输出一次进程id为21019服务的内存使用情况,共输出5次。其意义为:

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

实际问题分析:内存问题还是线程问题。

top -p pid 查看该服务的内存和cpu使用情况

jstack pid > dump_file_name 导出线程文件,分析线程情况。

一般分析步骤:

 

jps 获取pid

top -Hp pid 查看最消耗cpu的线程

printf “%x\n” tid  得到16进制的线程id

jstack pid | grep tid(16进制) 查看最消耗cpu的线程的方法。

jstat –gcutil pid  详解查看一下链接:

https://blog.csdn.net/zhaozheng7758/article/details/8623549

 

转载自:https://blog.csdn.net/qianghaohao/article/details/80379118

https://www.cnblogs.com/leefreeman/p/7464179.html 

posted @ 2019-04-16 14:41  平淡有从容  阅读(2329)  评论(0编辑  收藏  举报