Java进程CPU100%的问题

今天review了一下测试环境,后来发现一个java进程CPU 120%多,4核的CPU,很多人都没感觉。但是确实是很大问题。测试环境没什么并发,也没什么数据量怎么会这么高的cpu呢?

 

找到java进程中耗cpu最高的nid,

top –p pid –H

 

用jstack或者其他方式打印一下线程堆栈,从堆栈记录里找出nid,对应的线程和他的堆栈。找到出问题的方法。有这么一段代码。

while (true) {
            while (blockingDeque.size() > 0) {
                try {
                    final String message = String.valueOf(blockingDeque.poll());
}
}

 

 

本来blockingqueue的目的是空的时候,让线程堵住。让出CPU资源。现在他完全没用到,改成了让CPU空转,使得CPU 100%。另外需要将poll改成take或者加上timeout。代码还是要经常去review。

你可能感兴趣的:(java,jvm,Blocking Queue,cpu100%)