java cpu高达100%问题 排查

来源:互联网 发布:装饰公司网络推广方案 编辑:程序博客网 时间:2024/05/01 22:24
 2016-11-12 卍极客 

一次系统测试时执行top命令发现cpu竟接近100%!




找到进程id 31260,执行jstack 31260 > cpu31260.log,将堆栈信息dump到log文件中。


通过top -p 31260 -H命令找到占用cpu最多的线程,为31328




打开cpu31260log文件,查找到线程31328的相关信息:




发现是程序代码问题,即该类第37行,原来是一不小心把循环里面的阻塞方法写错了。


while (true) {


      Task task = taskQueue.poll();

      if (task != null) {

         ……..

      }

            …….

}


taskQueue是LinkedBlockingQueue类,程序的本意是在阻塞队列为空时阻塞等待,但poll()方法在获取不到元素时会直接返回null,所以poll()方法应该改成take(),这样就不会有毫无意义的死循环发生。


这里再补充一个小知识点,有时在mvn clean install 的时候经常卡在下载metadata文件,检查更新的地方,导致打包速度变慢。






这和maven仓库的访问速度有关,如果不想频繁检验,可对仓库作一些设置:


       <repository>

<id>centralmaven</id>

<url>http://central.maven.org/maven2/</url>

        <releases>

<enabled>true</enabled>

<updatePolicy>daily</updatePolicy>

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>

     </repository>


关键是updatePolicy节点,这是maven的更新策略,有多个选项:always表示总是,never表示从不,daily(默认)表示每天,interval:X 表示X分钟。


国内oschina的maven镜像站已经关闭了,知道有个阿里的镜像,速度还可以,但感觉其中的库没有官方的全面:

<mirrors>

    <mirror>

      <id>alimaven</id>

      <name>aliyun maven</name>

      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>

      <mirrorOf>central</mirrorOf>        

    </mirror>

  </mirrors>


不知道国内还有没有其他不错的镜像站,知道的朋友可以留言推荐下。

0 0
原创粉丝点击