说明:本文介绍线上问题排查利器,Arthas的使用及常用命令;
创建项目
首先,创建一个Demo项目,该项目有以下三个接口,对应三个问题:
-
test1:会造成CPU飙升,接近100%;
-
test2:会造成死锁;
-
test3:输出一段有错误拼写的信息;
(Controller代码)
@Autowired
private ArthasService arthasService;
/**
* 模拟CPU飙升
*
* @return
*/
@GetMapping({
"/test1"})
public String test1() {
arthasService.cpuHigh();
return "cpuHigh";
}
/**
* 死锁问题
*
* @return
*/
@GetMapping({
"/test2"})
public String test2() {
arthasService.deadThread();
return "deadThread";
}
/**
* 模拟热更新
*
* @return
*/
@GetMapping({
"/test3"})
public String test3() {
return arthasService.updateOut();
}
(ServiceImpl代码)
import org.springframework.stereotype.Service;
@Service
public class ArthasService {
/**
* 模拟CPU飙升
*/
public void cpuHigh() {
new Thread(() -> {
while (true) {
}
}).start();
}
/**
* 死锁问题
*/
public