解决Cpu过高的问题
package work.sajor.wechatpush;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class WechatPushApplication {
public static void main(String[] args) {
new Thread(() -> {
System.out.println("进入A线程");
while (true) {
}
},"A").start();
new Thread(() -> {
System.out.println("进入B线程");
try {
Thread.sleep(1000000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();
new Thread(() -> {
System.out.println("进入线程");
try {
Thread.sleep(1000000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
},"C").start();
SpringApplication.run(WechatPushApplication.class, args);
}
}
这是一个springboot项目 不知道为什么 普通maven项目 就是找不到文件
Error: Could not find or load main class .home.cpuhigh.jvm._05_cpuHigh
-
运行 程序nohup java -jar /home/cpuhigh/wechat-push-0.0.1-SNAPSHOT.jar &
-
执行top命令 发现有个cpu占用率达到90%
-
执行 ps H eo pid,tid %cpu 可以看到23268进程的23279线程占用的cpu达到了92.8%
- H 展示所有的进程数
- -eo 输出那些信息 例如pid tid(线程Id) ,%cpu (cpu占用率 )
- 可以通过ps H eo pid,tid,%cpu | grep 23268 进一步筛选之查看 23268进程的信息
-
执行jstack 进程号 jstack 23268 可以查看该进程的全部线程信息
-
接下来就可以通过 ps H eo pid,tid %cpu命令中查询到的线程id 去 中查看具体的代码行数了 上方第三步 中线程id使用的十进制 而 第四步展示的是16进制的 所以需要自己转换一下将23279转换一下就是5AEF 通过查看发现是在运行第14行
-
kill -9 23268 结束进程 不是线程 整个jvm都停了