今天写了一段垃圾代码,然后上服务器上运行,cpu瞬间飙到了100%,现记录一下问题排除过程~

1. 问题代码

 1 package qinfeng.zheng.mockmvcdemo;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Component;
 5 import qinfeng.zheng.mockmvcdemo.service.UserService;
 6 
 7 import javax.annotation.PostConstruct;
 8 
 9 @Component
10 public class TestComponent {
11 
12     @Autowired
13     private UserService userService;
14 
15     @PostConstruct
16     public void init() {
17         new Thread(()->{
18             while (true) {
19                 if ( userService.getUser() !=null) {
20                     // do something
21                 }
22             }
23         }).start();
24     }
25 }

 

2. top 

 

3. 查找问题

3.1  top -Hp  18571, 找出最耗cpu的线程,结果发现18584是就耗了99.9%

 

3.2 将十进制的线程号转成十六进制

  printf "0x%x\n" 18584

 

3.3  jstack查找问题代码

  jstack 18571| vim +/0x4898 -

 

 

  跑去看TestComponent.java 的第19行~~~~ 死到这里了。。。。。 

  网上百度一波,while(true) 超级耗cpu, Thread.sleep(1) , 睡一下,cpu直接降到1%

 

posted on 2019-10-22 22:17  显示账号  阅读(2442)  评论(0编辑  收藏  举报