[root@VM_0_13_centos ~]# top --使用top查看系统资源使用情况
可以看到java进程占用CPU到达了98.3% 记住上面的线程ID10279
后面有用
1、通过上面得到的进程ID查找进程下线程的CPU线程占比
[root@VM_0_13_centos ~]# top Hp 10279
可以看到线程号为10290
和10289
的两个线程CPU占比较高,记住它两。
2、进行进制转换将10进制的线程id转换为16进制
10290 -> 0x2832
10289 -> 0x2831
3、将java进程的日志保存
jstack 10279 > 10279.log
以上命令的意思是将pid为10279的进程日志输出到桌面名字为10279.log
jstack是java虚拟机自带的一种堆栈跟踪工具,安装好jdk后bin目录下就有这个程序。
3、通过上面得到的16进制线程id0x2832
和0x2831
,在日志中找到产生该线程的代码行。
[root@VM_0_13_centos ~]# cat -n Demo_CPU.java
1 public class Demo_CPU {
2 public static void main(String[] args) throws InterruptedException {
3
4 cpuFix();
5 }
6
7 public static void cpuFix() throws InterruptedException {
8
9 for (int i = 0; i < 2; i++) {
10 new Thread(new Runnable() {
11
12 @Override
13 public void run() {
14 while (true) {
15 Math.sqrt(4);
16 }
17 }
18 }).start();
19 }
20 }
21 }