1、搭建CentOS 7.9,部署JDK 8:
2、编写测试代码Test.java:
public class Test {
public static void main(String[] args) {
System.out.println("测试死循环对CPU的影响");
while (true){
}
}
}
3、编译Test.java:
# javac Test.java
4、运行Test程序:
# java Test
5、新开一个Shell窗口,使用top命令,按c键,降序查看CPU使用率:
6、查看进程PID下的线程详情:ps H -eo pid,tid,%cpu | grep 进程PID
# ps H -eo pid,tid,%cpu | grep 3698
7、将线程的TID值转化为16进制格式:printf '0x%x\n' 线程TID
# printf '0x%x\n' 3699
8、使用jstack命令查看指定进程的当前时刻的线程快照:jstack 进程PID | grep -A 20 16进制线程TID
# jstack 3698 | grep -A 20 0xe73
说明:直接定位到了Test.java第四行代码的位置,即while死循环位置,修改代码并重新编译运行,就可解决此死循环导致的CPU占用率高的问题。
标签:Java,grep,jstack,线程,Test,java,使用率,CPU From: https://blog.51cto.com/qiuyue/8668769