阅读量1,530

JVM 线上常用调试指令

  1. jstat 命令 – 查看堆内存各部分的使用量,以及加载类的数量

例如: jstat -gccapacity 7

输出如下:

NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
171008.0 2732032.0 2398208.0 16896.0 36352.0 2162688.0 343040.0 5464064.0 426496.0 426496.0 0.0 1126400.0 87680.0 0.0 1048576.0 10112.0 20 3

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • EC:伊甸园区的大小
  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:当前老年代大小
  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代gc次数
  • FGC:老年代GC次数

2. jstack 找出最耗CPU的线程并定位代码

例子: top -Hp 7

输出如下:

得到最耗CPU的线程 71。然后运行命令:

printf “%x\n” 71

输出71的十六进制值为:41

运行命令:

jstack 7

查找输出:(包含字符串 nid=0x41)

输出如下:

此即为有问题的代码