jstack找出占用cpu最高的线程堆栈信息
package com.tuling.jvm;public class Math {public static final int initData = 666;public static User user = new User();public int compute() { //一个方法对应一块栈帧内存区域int a = 1;int b = 2;int c = (a + b) * 10;return c;}public static void main(String[] args) {Math math = new Math();while (true) {math.compute();}}}
1,使用top命令或者top -p 进程号指定显示你的java进程的内存情况,pid是你的java进程号,比如19663 
2,按H,获取每个线程的内存情况 
3,找到内存和cpu占用最高的线程tid,比如19664
4,转为十六进制得到 0x4cd0,此为线程id的十六进制表示
5,执行 jstack 19663|grep -A 10 4cd0,得到线程堆栈信息中 4cd0 这个线程所在行的后面10行,从堆栈中可以发现导致cpu飙高的调 用方法 
6,查看对应的堆栈信息找出可能存在问题的代码
