首先新建一个springboot项目,新建一个controller
@RestController
public class DeadLockController {
private Object lock1 = new Object();
private Object lock2 = new Object();
@GetMapping("/deadlock")
public String deadLock() {
new Thread(() -> {
synchronized (lock1) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
synchronized (lock2) {
System.out.println("Thread1 over");
}
}
}).start();
new Thread(() -> {
synchronized (lock2) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
synchronized (lock1) {
System.out.println("Thread2 over");
}
}
}).start();
return "deadlock";
}
@RequestMapping("/loop")
public List<Long&

本文通过一个SpringBoot项目演示了如何利用jstack命令找出导致CPU占用率过高的原因。首先创建了一个包含死循环的controller,观察到进程CPU使用率达到700%,然后使用jstack找到高CPU占用的线程,发现它们在执行DeadLockController中的方法。接着模拟死锁情况,再次使用jstack分析,成功定位到死锁发生的位置。
最低0.47元/天 解锁文章
4063

被折叠的 条评论
为什么被折叠?



