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