1.新建一个springboot项目新加两个接口一个是测试接口是否访问通过/test另一个是专门模拟让cpu飙高的接口/loop将其打包成一个jar放在服务器上。packagecom.cao.controller;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;RestControllerpublicclassTestController{RequestMapping(/test)publicStringtest(){returntest;}/** * 死循环让CPU拉满用于测试CPU负载 * return */RequestMapping(/loop)publicStringloop(){System.out.println(loop start...);while(true){Math.random();// 持续做计算CPU 直接拉满}}}2.使用java -jar命令启动springboot项目3.访问test接口确保接口正常可以访问4.访问是/loop触发cpu飙高的接口5.排查cpu飙高5.1 使用top命令看cpu最高的top# top命令之后在锁定大写的情况下就可以按P键会按照进行从高到低进行排序或者top|grepjava# 使用这个命令来缩小范围查看但是是无法查看cpu的使用率的还是用top最好找到cpu占比最高的是进程号PID是16108所占cpu已经是99.3%5.2 使用jstack PID命令查看该进程的线程信息jstack 是 JDK 自带的一个命令行工具用于生成 Java 虚拟机当前时刻的线程快照Thread Dump。PID是你要查看的那个 Java 进程的进程号。jstack16108a.txt将这个信息保存到a.txt中方便查看查询5.3 使用top -p PID -H查看这个进程中哪个线程占用的最高top-p16108-H5.4 使用转化后的16进制的线程号找到对应的代码找到线程号是16124占用最高 这个是10进制的但是在jstack PID中打印的是16进制的所以要将这个10进制的转为16进制的才能查询到对应的日志信息vima.txt 在vim中使用?加关键词进行搜索 ?3efc 进行查询关键字3efc就可以定位到是那行代码的问题了找到了这个线程的对应信息找到是TestController.java 的22行就是了6.常见的cpu飙高的原因