点石互动

导航

 

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

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

top –p pid –H

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

Java代码 复制代码 收藏代码
  1. while (true) {
  2. while (blockingDeque.size() > 0) {
  3. try {
  4. final String message = String.valueOf(blockingDeque.poll());
  5. }
  6. }
while (true) {            while (blockingDeque.size() > 0) {                try {                    final String message = String.valueOf(blockingDeque.poll());}}

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

posted on 2013-02-12 16:39  点石互动  阅读(213)  评论(0编辑  收藏  举报